我想要获得机器码等,必须要能读取硬件的某个参数,并且读出来的是唯一的能和其它机器区分的。目前有那几种方法了:1、网卡mac,可是这个东西经常读出来的是用户上网的虚拟卡mac,很多用户都一样,就算读出来的是物理的,本机的,如有2个网卡,如果用户设置禁用了一个网卡,那机器没变读出来的mac和以前的也不一样了。2、盘序列号,可是这个没有工业标准,不能保证唯一,听说有的硬盘还读不出来。3、cpu,主板的序列号都不能保证唯一。怎么办了?目前一些商业软件不知道是如何处理的?他们用机器码、注册码等,单我想如果不能读出硬件唯一号是无法实现的,请个位同仁给点意见,谢谢。
Global GetVal As Long '注册 '<<< 读取是否注册的信息,如何控制这里不再说明
Dim TempStr1 As String * 256
Dim TempStr2 As String * 256
Dim TempLon1 As Long
Dim TempLon2 As Long
Call GetVolumeInformation("C:", TempStr1, 256, GetVal, TempLon1, TempLon2, TempStr2, 256)
'>>> '提取本机C盘的序列号至文本框一
Text1.Text = GetVal
//获取cpuid
private string GetCpuID()
{
string CpuInfo = "";
ManagementClass cimobject = new
ManagementClass("Win32_Processor");
ManagementObjectCollection moc = cimobject.GetInstances();
foreach (ManagementObject mo in moc)
{
CpuInfo = mo.Properties["ProcessorId"].Value.ToString();
}
return CpuInfo;
}
//获取硬盘id
private string GetHardID()
{
string HDInfo = "";
ManagementClass cimobject1 = new ManagementClass("Win32_DiskDrive");
ManagementObjectCollection moc1 = cimobject1.GetInstances();
foreach (ManagementObject mo in moc1)
{
HDInfo = (string)mo.Properties["Model"].Value;
}
return HDInfo;
}
//获取网卡物理地址
private string GetMacAddress()
{
string MacAddress = "";
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc2 = mc.GetInstances();
foreach (ManagementObject mo in moc2)
{
if ((bool)mo["IPEnabled"] == true)
MacAddress = mo["MacAddress"].ToString();
mo.Dispose();
}
return MacAddress;
}
不过cpuid 同一批的cpu是一样的,而网卡物理地址是可以更改的,只有硬盘编号是不能改的,重装了也不行,所以推荐用硬盘id,读取之后可以用md5加密,就生成了唯一的序列号