在開發過程中,經常需要擷取電腦的一些屬性,如擷取硬碟ID/CPU序列号/MAC位址作為來加密字元串。
1、硬碟
在我檢視網上一些文檔時,發現很多人對硬碟序列号很模糊~
什麼叫硬碟序列号?指的是作為一個硬碟的辨別;但是有時候發現,同僚的電腦硬碟序列号有重複的。是以硬碟辨別我們可以試試用ID,這個如何擷取下面講解。

我們可以運作DOS指令,或者檢視系統資料庫,檢視硬碟的序列号。如圖中所示:都是HGST HTS725050A7E630。
大部分情況下,大家都可以通過如下擷取:
Dim key As RegistryKey = Registry.LocalMachine
Dim subKey = key.OpenSubKey("HARDWARE\DEVICEMAP\Scsi\Scsi Port 0\Scsi Bus 0\Target Id 0\Logical Unit Id 0")
Dim bbb = subKey.GetValue("Identifier")
也可以通過Wmi方式擷取:
Dim cmicWmi As New System.Management.ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive")
Dim diskId As String '數字ID
Dim diskSerialNumber As String '這個我們暫且稱其為序列号碼
Dim diskModel As String '序列号
For Each cmicWmiObj As ManagementObject In cmicWmi.Get
diskId = cmicWmiObj("signature")
diskSerialNumber = cmicWmiObj("serialnumber")
diskModel = cmicWmiObj("Model")
Next
個人建議用Wmiy中的signature來作為ID,畢竟是數字,且不重複。
PS:順帶提一個硬碟的容量,通過屬性size可以擷取單個硬碟的大小,加起來的話就是電腦總容量了。
2、CPU序列号
Dim Wmi As New System.Management.ManagementObjectSearcher("SELECT * FROM Win32_Processor")
Dim cpuId As String
For Each WmiObj As ManagementObject In Wmi.Get
cpuId = WmiObj("ProcessorId")
Next
3、MAC位址和IP位址
Dim netid As String = ""
Dim ip As String
Dim searcher As New ManagementObjectSearcher("select * from win32_NetworkAdapterConfiguration")
Dim moc2 As ManagementObjectCollection = searcher.Get()
For Each mo As ManagementObject In moc2
If mo("IPEnabled") Then
netid = mo("MACAddress")
ip = mo("IpAddress")(0)
Exit For
End If
Next
IpAddress得到的是含有倆個元素的數組,第一個是實際上的IP。
4、電腦系統類型與實體記憶體
Dim pcType As String
Dim pcMemory As String
Dim mos As New ManagementObjectSearcher("select * from Win32_ComputerSystem")
For Each mo As Object In mos.Get()
pcType = mo("SystemType")
pcMemory = mo("TotalPhysicalMemory")
Next
系統類型,電腦的作業系統;實體記憶體,即是指運作記憶體。
比如我目前電腦組態是“x64-based PC”、“8272879616”-8G
5、其它
Dim userName = Environment.UserName--擷取使用者名 eg:Admin
Dim machineName = Environment.MachineName--擷取電腦名稱 eg:IBM777-PB4DVTY
作者:
唐宋元明清2188出處:
http://www.cnblogs.com/kybs0/本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須在文章頁面給出原文連接配接,否則保留追究法律責任的權利。