C#获取硬盘序列号

本来准备直接用在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

本文链接:C#获取硬盘序列号

转载声明:BeiTown原创,转载请注明来源:BeiTown's Coder 编码之源,谢谢


Tags: , ,

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>