前言:unity的SytemInfo所提供的硬件信息不全面;可以使用System.Management.dll提供的接口获取需要的硬件信息。但是Mono下没有实现对应的接口,因此曲线救国,在.net应用程序中获取信息,再从unity中启动.net应用程序,获取需要的数据。
具体步骤:
1、创建控制台应用
2、 引用System.Management.dll
3、 调用所需数据的接口,获取对应数据
4、生成.exe并放在所需路径
5、在unity中启动.exe,并从中读取刚才获取的数据
private void GetHardwareInfo(string arguments = null)
{
System.Diagnostics.Process p = new System.Diagnostics.Process();
//设置.net的程序路径
p.StartInfo.FileName = Application.dataPath + "/GetHardwareInfo.exe";
p.StartInfo.Arguments = arguments;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.StandardOutputEncoding = Encoding.Default;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
p.Start();
StreamReader s = p.StandardOutput;
p.WaitForExit();
ReadHardware(s.ReadToEnd());
s.Close();
}
private void ReadHardware(string content)
{
//处理接收到的内容
var infos = content.Split('\n');
_mac = infos[0];
logger.info($"Mac : {_mac}");
_cpu = infos[1];
logger.info($"Cpu : {_cpu}");
_disk = infos[2];
logger.info($"Disk : {_disk}");
_bios = infos[3].Trim();
logger.info($"Bios : {_bios}");
}
https://zhuanlan.zhihu.com/p/35421741
感谢大神思路。
|