现在有这样一个问题,我的程序需要读取硬盘的序列号,在网上看到很多关于如何用DiskID32.dll来获取硬盘序列号的文章,也尝试着去使用,发现无法获取序列号,程序没有任何错误,但是在获取序列号的时候返回的硬盘序列号始终是0,返回值也是0,在网上没有发现这样的问题,查阅大量文章后都不能解决我的问题。
不能使用WMI,因为这个在某些机器上没有安装,并且有的机器可能损坏,也有可能这个服务用户没有开启。
具体代码如下: [DllImport("DiskID32.dll")]
public static extern long DiskID32(ref byte DiskModel, ref byte DiskID); public static string GetDiskID()
{
byte[] DiskModel = new byte[31];
byte[] DiskID = new byte[31];
int i;
string Model = "";
string ID = ""; if (DiskID32(ref DiskModel[0], ref DiskID[0]) != 1)
{ for (i = 0; i < 31; i++)
{ if (Convert.ToChar(DiskID[i]) != Convert.ToChar(0))
{
ID = ID + Convert.ToChar(DiskID[i]);
}
}
ID = ID.Trim();
}
else
{
Console.WriteLine("获取硬盘序列号出错");
}
return ID;
}
在这个方法中,DiskModel和DiskID中的所有元素全是0,DiskID32方法的返回值也是0.
我的环境是:
操作系统:Win7
开发环境:VS2010, VS2008
机器类型:64位机,32位机
这些测试都不能通过,请大家帮忙看看问题所在,多谢了!!!
不能使用WMI,因为这个在某些机器上没有安装,并且有的机器可能损坏,也有可能这个服务用户没有开启。
具体代码如下: [DllImport("DiskID32.dll")]
public static extern long DiskID32(ref byte DiskModel, ref byte DiskID); public static string GetDiskID()
{
byte[] DiskModel = new byte[31];
byte[] DiskID = new byte[31];
int i;
string Model = "";
string ID = ""; if (DiskID32(ref DiskModel[0], ref DiskID[0]) != 1)
{ for (i = 0; i < 31; i++)
{ if (Convert.ToChar(DiskID[i]) != Convert.ToChar(0))
{
ID = ID + Convert.ToChar(DiskID[i]);
}
}
ID = ID.Trim();
}
else
{
Console.WriteLine("获取硬盘序列号出错");
}
return ID;
}
在这个方法中,DiskModel和DiskID中的所有元素全是0,DiskID32方法的返回值也是0.
我的环境是:
操作系统:Win7
开发环境:VS2010, VS2008
机器类型:64位机,32位机
这些测试都不能通过,请大家帮忙看看问题所在,多谢了!!!
网址:http://www.winsim.com/diskid32/diskid32.html
我想如果那个exe可以用,那么这个DLL应该可以用吧:)
1、Win7上面,先用VC测试DiskID32.dl,能否正常使用。
2、如果1通过,你把DiskID32函数C++原型贴出来,代码加上try{}catch{},进行断点调试,看看报什么错误