「Xamarin.MacでMac本体のシリアル番号を取得する」の版間の差分
ナビゲーションに移動
検索に移動
(→関連項目) |
|||
74行目: | 74行目: | ||
== 関連項目 == | == 関連項目 == | ||
* [[Xamarin.Mac/ディスプレイのスリープを解除する]] | * [[Xamarin.Mac/ディスプレイのスリープを解除する]] | ||
+ | * [[Xamarin.Mac/アプリのメモリ使用量を取得する]] | ||
* [[macOS/シリアル番号を取得する]] | * [[macOS/シリアル番号を取得する]] | ||
80行目: | 81行目: | ||
{{stub}} | {{stub}} | ||
+ | |||
+ | [[category: Xamarin.Mac]] |
2016年11月14日 (月) 07:55時点における版
Xamarin.MacでSMCKitを使いたくてその大元となるIOKitの使い方を調べていたら拾った。 最終的には「IOConnectCallStructMethod」を使いたいわけだが、そこまでたどりつけないので途中経過で得たものをメモしておく。
実装
リンゴマークの「この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());
}
}
}