Macos Xamarin Mac-以编程方式获取系统信息

Macos Xamarin Mac-以编程方式获取系统信息,macos,xamarin,cpu,hardware,Macos,Xamarin,Cpu,Hardware,我试图以编程方式获取Xamarin Mac中的基本系统信息 我需要的信息是: 处理器(例如:i7 4700 2.4GHz) Ram(例如:16GB) 磁盘大小(例如:256GB) 版本(例如:13“视网膜2016) 等等。我查阅了几篇文章,但在很多情况下,我得到的所有信息都与操作系统相关,而不是与硬件相关 例如: 提前感谢您可以通过查询sysctl获得大部分信息。但是,这在Darwin类中没有公开,因此您需要自己做一点DllImport [DllImport(Constants.Syste

我试图以编程方式获取Xamarin Mac中的基本系统信息

我需要的信息是:

  • 处理器(例如:i7 4700 2.4GHz)
  • Ram(例如:16GB)
  • 磁盘大小(例如:256GB)
  • 版本(例如:13“视网膜2016)
等等。我查阅了几篇文章,但在很多情况下,我得到的所有信息都与操作系统相关,而不是与硬件相关

例如:


提前感谢

您可以通过查询
sysctl
获得大部分信息。但是,这在
Darwin
类中没有公开,因此您需要自己做一点
DllImport

[DllImport(Constants.SystemLibrary)]
内部静态外部int sysctlbyname(
[Marshallas(UnmanagedType.LPStr)]字符串属性,
IntPtr输出,
奥德伦国际酒店,
IntPtr newp,
尤因·纽伦);
然后,您可以使用以下工具获取值:

公共静态字符串GetSystemProperty(字符串属性)
{
var pLen=Marshal.AllocHGlobal(sizeof(int));
sysctlbyname(属性,IntPtr.Zero,pLen,IntPtr.Zero,0);
变量长度=Marshal.ReadInt32(pLen);
var pStr=封送。AllocHGlobal(长度);
sysctlbyname(属性,pStr,pLen,IntPtr.Zero,0);
返回Marshal.PtrToStringAnsi(pStr);
}
通过在命令行中运行
sysctl-a
,您可以列出计算机上的所有密钥,以确定要查询的内容。因此,对于要查找的信息,请执行以下操作:

var cpu=GetSystemProperty(“machdep.cpu.brand_string”);
var ram=GetSystemProperty(“hw.memsize”);
var macModel=GetSystemProperty(“hw.model”);
var osVersion=GetSystemProperty(“kern.osrelease”);
var hostName=GetSystemProperty(“kern.hostName”);
您可以通过以下方式获取屏幕信息:

var screenSize=$“{NSScreen.MainScreen.Frame.Width}x{NSScreen.MainScreen.Frame.Height}”;
编辑:

您可以通过查询IOKit IOPlatformExpertDevice来获取设备序列号。此代码可能也适用于iOS:

公共静态类设备串行
{
[DllImport(“/System/Library/Frameworks/IOKit.framework/IOKit”)]
专用静态外部uint IOServiceGetMatchingService(uint主端口、IntPtr匹配);
[DllImport(“/System/Library/Frameworks/IOKit.framework/IOKit”)]
私有静态外部IntPtr ioservice匹配(字符串s);
[DllImport(“/System/Library/Frameworks/IOKit.framework/IOKit”)]
私有静态外部IntPtr IORegistryEntryCreateCFProperty(uint条目、IntPtr密钥、IntPtr分配器、uint选项);
[DllImport(“/System/Library/Frameworks/IOKit.framework/IOKit”)]
私有静态外部intioobjectrelease(uinto);
公共静态字符串GetSerial()
{
string serial=string.Empty;
uint platformExpert=IOServiceGetMatchingService(0,IOServiceMatching(“IOPlatformExpertDevice”);
如果(platformExpert!=0)
{
NSString键=(NSString)“IOPlatformSerialNumber”;
IntPtr serialNumber=IORegistryEntryCreateCProperty(platformExpert,key.Handle,IntPtr.Zero,0);
if(serialNumber!=IntPtr.Zero)
{
serial=NSString.FromHandle(serialNumber);
}
IOObjectRelease(platformExpert);
}
返回序列号;
}
}
然后,您可以通过以下方式获取序列号:

var serial=DeviceSerial.GetSerial();

您可以通过查询
sysctl
获得大部分信息。但是,这在
Darwin
类中没有公开,因此您需要自己做一点
DllImport

[DllImport(Constants.SystemLibrary)]
内部静态外部int sysctlbyname(
[Marshallas(UnmanagedType.LPStr)]字符串属性,
IntPtr输出,
奥德伦国际酒店,
IntPtr newp,
尤因·纽伦);
然后,您可以使用以下工具获取值:

公共静态字符串GetSystemProperty(字符串属性)
{
var pLen=Marshal.AllocHGlobal(sizeof(int));
sysctlbyname(属性,IntPtr.Zero,pLen,IntPtr.Zero,0);
变量长度=Marshal.ReadInt32(pLen);
var pStr=封送。AllocHGlobal(长度);
sysctlbyname(属性,pStr,pLen,IntPtr.Zero,0);
返回Marshal.PtrToStringAnsi(pStr);
}
通过在命令行中运行
sysctl-a
,您可以列出计算机上的所有密钥,以确定要查询的内容。因此,对于要查找的信息,请执行以下操作:

var cpu=GetSystemProperty(“machdep.cpu.brand_string”);
var ram=GetSystemProperty(“hw.memsize”);
var macModel=GetSystemProperty(“hw.model”);
var osVersion=GetSystemProperty(“kern.osrelease”);
var hostName=GetSystemProperty(“kern.hostName”);
您可以通过以下方式获取屏幕信息:

var screenSize=$“{NSScreen.MainScreen.Frame.Width}x{NSScreen.MainScreen.Frame.Height}”;
编辑:

您可以通过查询IOKit IOPlatformExpertDevice来获取设备序列号。此代码可能也适用于iOS:

公共静态类设备串行
{
[DllImport(“/System/Library/Frameworks/IOKit.framework/IOKit”)]
专用静态外部uint IOServiceGetMatchingService(uint主端口、IntPtr匹配);
[DllImport(“/System/Library/Frameworks/IOKit.framework/IOKit”)]
私有静态外部IntPtr ioservice匹配(字符串s);
[DllImport(“/System/Library/Frameworks/IOKit.framework/IOKit”)]
私有静态外部IntPtr IORegistryEntryCreateCFProperty(uint条目、IntPtr密钥、IntPtr分配器、uint选项);
[DllImport(“/System/Library/Frameworks/IOKit.framework/IOKit”)]
私有静态外部intioobjectrelease(uinto);
公共静态字符串GetSerial()
{
string serial=string.Empty;
uint platformExpert=IOServiceGetMatchingService(0,IOServiceMatching(“IOPlatformExpertDevice”);
如果(platformExpert!=0)
{
NSString键=(NSString)“IOPlatformSerialNumber”;
IntPtr serialNumber=IORegistryEntryCreateCProperty(platformExpert,key.Ha
eg: NSDictionary setting = NSDictionary.FromFile ("/System/Library/CoreServices/SystemVersion.plist");  
string os_version_string = (NSString)setting.ValueForKey ((NSString)"ProductVersion");