本来准备直接用在U3D里的,但是无奈游戏程序一加载到该模块就完全崩溃,目前原因不明,有可能是该部分功能已经超越Unity的权限范围,不过独立的C#版本是可用的,这里先把代码发上来
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | using System.Management;//导入此命名空间 /** * 该函数返回存有硬盘序列号的字符串 **/ private string GetDiskSerial() { try { ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia"); String strHardDiskID = "nothing found!"; foreach (ManagementObject mo in searcher.Get()) { strHardDiskID = mo["SerialNumber"].ToString().Trim(); break; } return strHardDiskID; } catch { return "nothing found!"; } } |
基本原理就是调用API去与硬件底层交互
不过测试之后发现有些时候并不能获取到硬盘序列号
所以又有了第二种方法,代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 | private string GetDiskInfo() { try { GetHardId.HardDiskInfo hdd = AtapiDevice.GetHddInfo(0); string hardinfo = "硬盘型号:" + hdd.ModuleNumber + " 硬盘ID号:" + hdd.SerialNumber + " 固件版本:" + hdd.Firmware + " 硬盘容量:" + hdd.Capacity; return hardinfo; } catch { return "nothing found!"; } } |
第二种方法列出了硬盘的其他信息,大家可以结合API视情况调用。
关于U3D无非调用System.Management.dll的问题暂时无非解决,决定自己用C++写一个DLL来实现此需求,详情后续发文。
本文意在分享,与君共勉之。
BeiTown
2012.12.11