ram*_*nar -1 vb.net cmd command-prompt vb.net-2010
我尝试从PC上获取硬盘和主板序列号。在Windows 7及更高版本中效果很好
但是CMD中的相同代码不适用于Windows XP。显示OEM已满或什么也没有退货
wmic diskdrive get name,serialnumber,model // This is cmd to get serial num
Run Code Online (Sandbox Code Playgroud)
在Windows XP中,它返回序列号错误
wmic baseboard get product,Manufacturer,version,serialnumber // This is cmd to get MotherBoard serialnumber
Run Code Online (Sandbox Code Playgroud)
在Windows XP和Win 8中,它返回序列号错误,例如“ 由OEM填充 ”
我正在寻找Best Pc Unique Id,它可以为任何操作系统返回ID或序列号,并且应该是唯一的。
请帮我
谢谢。
我在网上找到了一个小项目,他们得到了:
然后,他们通过MD5对其进行哈希处理,但现在已贬值,因此最好的选择是这样做,并通过Sha512对其进行哈希处理
首先,您需要导入并引用(如果未自动完成):
Imports System.Management
Imports System.Security.Cryptography
Imports System.Text
Run Code Online (Sandbox Code Playgroud)
然后该函数获取HWID(HardwareID)
Public Function Get_HWID() As String
'Information Handler
Dim hw As New clsComputerInfo
'Decalre variables
Dim hdd, cpu, mb, mac As String
'Get all the values
cpu = hw.GetProcessorId()
hdd = hw.GetVolumeSerial("C")
mb = hw.GetMotherBoardID()
mac = hw.GetMACAddress()
'Generate the hash
Dim hwid As String = GenerateSHA512String(cpu & hdd & mb & mac)
Return hwid
End Function
Run Code Online (Sandbox Code Playgroud)
生成哈希的函数:
Public Shared Function GenerateSHA512String(ByVal inputString) As String
Dim sha512 As SHA512 = SHA512Managed.Create()
Dim bytes As Byte() = Encoding.UTF8.GetBytes(inputString)
Dim hash As Byte() = sha512.ComputeHash(bytes)
Dim stringBuilder As New StringBuilder()
For i As Integer = 0 To hash.Length - 1
stringBuilder.Append(hash(i).ToString("X2"))
Next
Return stringBuilder.ToString()
End Function
Run Code Online (Sandbox Code Playgroud)
最后是Class以获取信息:
Public Class clsComputerInfo
Friend Function GetProcessorId() As String
Dim strProcessorId As String = String.Empty
Dim query As New SelectQuery("Win32_processor")
Dim search As New ManagementObjectSearcher(query)
Dim info As ManagementObject
For Each info In search.Get()
strProcessorId = info("processorId").ToString()
Next
Return strProcessorId
End Function
Friend Function GetMACAddress() As String
Dim mc As ManagementClass = New ManagementClass("Win32_NetworkAdapterConfiguration")
Dim moc As ManagementObjectCollection = mc.GetInstances()
Dim MACAddress As String = String.Empty
For Each mo As ManagementObject In moc
If (MACAddress.Equals(String.Empty)) Then
If CBool(mo("IPEnabled")) Then MACAddress = mo("MacAddress").ToString()
mo.Dispose()
End If
MACAddress = MACAddress.Replace(":", String.Empty)
Next
Return MACAddress
End Function
Friend Function GetVolumeSerial(Optional ByVal strDriveLetter As String = "C") As String
Dim disk As ManagementObject = New ManagementObject(String.Format("win32_logicaldisk.deviceid=""{0}:""", strDriveLetter))
disk.Get()
Return disk("VolumeSerialNumber").ToString()
End Function
Friend Function GetMotherBoardID() As String
Dim strMotherBoardID As String = String.Empty
Dim query As New SelectQuery("Win32_BaseBoard")
Dim search As New ManagementObjectSearcher(query)
Dim info As ManagementObject
For Each info In search.Get()
strMotherBoardID = info("SerialNumber").ToString()
Next
Return strMotherBoardID
End Function
End Class
Run Code Online (Sandbox Code Playgroud)
我查看了该项目的代码
希望这可以为您提供帮助,请记住将引用添加到“ 管理”中
更多信息:
用于HWID的最常见ID为:CPU ID和基于MAC地址的硬件ID和硬盘序列号
不建议将HWID用作许可系统,因为它不准确,如果用户更换计算机或格式化驱动器等也不实用。建议使用证书系统或更复杂的身份验证。