「Xamarin.MacでMac本体のシリアル番号を取得する」の版間の差分
ナビゲーションに移動
検索に移動
(ページの作成:「Xamarin.MacでSMCKitを使いたくてその大元となるIOKitの使い方を調べていたら拾った。 最終的には「IOConnectCallStructMethod」を使いた...」) |
imported>Administrator (→実装) |
||
(2人の利用者による、間の5版が非表示) | |||
1行目: | 1行目: | ||
− | Xamarin. | + | [[Xamarin.Mac]]で[[SMCKit]]を使いたくてその大元となる[[IOKit]]の使い方を調べていたら拾った。 |
最終的には「IOConnectCallStructMethod」を使いたいわけだが、そこまでたどりつけないので途中経過で得たものをメモしておく。 | 最終的には「IOConnectCallStructMethod」を使いたいわけだが、そこまでたどりつけないので途中経過で得たものをメモしておく。 | ||
== 実装 == | == 実装 == | ||
− | + | リンゴマークの「このMacについて」で表示される「シリアル番号」がコンソールに表示されるだけのサンプル。一般人にはとくに役に立つものではない。会社や学校なんかで数百台のMacがある場合にはこれを応用して管理すると便利だよ。 | |
<source lang="csharp"> | <source lang="csharp"> | ||
73行目: | 73行目: | ||
== 関連項目 == | == 関連項目 == | ||
* [[Xamarin.Mac/ディスプレイのスリープを解除する]] | * [[Xamarin.Mac/ディスプレイのスリープを解除する]] | ||
+ | * [[Xamarin.Mac/アプリのメモリ使用量を取得する]] | ||
+ | * [[macOS/シリアル番号を取得する]] | ||
== 参考文献 == | == 参考文献 == | ||
78行目: | 80行目: | ||
{{stub}} | {{stub}} | ||
+ | |||
+ | [[category: Xamarin.Mac]] |
2018年7月18日 (水) 10:57時点における最新版
Xamarin.MacでSMCKitを使いたくてその大元となるIOKitの使い方を調べていたら拾った。 最終的には「IOConnectCallStructMethod」を使いたいわけだが、そこまでたどりつけないので途中経過で得たものをメモしておく。
実装[編集 | ソースを編集]
リンゴマークの「このMacについて」で表示される「シリアル番号」がコンソールに表示されるだけのサンプル。一般人にはとくに役に立つものではない。会社や学校なんかで数百台のMacがある場合にはこれを応用して管理すると便利だよ。
using Foundation;
using AppKit;
namespace SMCKitSample
{
static class MainClass
{
[DllImport("/System/Library/Frameworks/IOKit.framework/IOKit")]
static extern uint IOServiceGetMatchingService(IOMasterPort masterPort, IntPtr matching);
[DllImport("/System/Library/Frameworks/IOKit.framework/IOKit")]
static extern IntPtr IOServiceMatching(string s);
[DllImport("/System/Library/Frameworks/IOKit.framework/IOKit")]
static extern IntPtr IORegistryEntryCreateCFProperty(uint entry, IntPtr key, IntPtr allocator, uint options);
[DllImport("/System/Library/Frameworks/IOKit.framework/IOKit")]
static extern int IOObjectRelease(uint o);
public enum IOMasterPort : uint
{
Default = 0,
};
public static string GetSerialNumber()
{
string serialNumber = string.Empty;
uint service = 0;
try
{
IntPtr matching = IOServiceMatching("IOPlatformExpertDevice");
service = IOServiceGetMatchingService(IOMasterPort.Default, matching);
if (service == 0)
{
return string.Empty;
}
NSString key = (NSString)"IOPlatformSerialNumber";
IntPtr serialHandle = IORegistryEntryCreateCFProperty(service, key.Handle, IntPtr.Zero, 0);
if (serialHandle != IntPtr.Zero)
{
serialNumber = NSString.FromHandle(serialHandle);
}
}
finally
{
if (service != 0)
{
IOObjectRelease(service);
}
}
return serialNumber;
}
public static void Main(string[] args)
{
NSApplication.Init();
Console.WriteLine(GetSerialNumber());
}
}
}