如何用VB获取vb 硬盘序列号号

2009年10月 Delphi大版内专家分月排行榜第二2009年8月 Delphi大版内专家分月排行榜第二2008年9月 Delphi大版内专家分月排行榜第二
2008年7月 Delphi大版内专家分月排行榜第三2008年6月 Delphi大版内专家分月排行榜第三
2010年10月 Delphi大版内专家分月排行榜第三2010年4月 Delphi大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。编程入门网-Vb.net中通过WMI获得硬盘和CPU的物理序列号
您的位置:&&
Vb.net中通过WMI获得硬盘和CPU的物理序列号
文章来源:互联网
'获得硬盘序列号
Dim cmicWmi As New System.Management.ManagementObjectSearcher(&SELECT * FROM Win32_DiskDrive&)
Dim Uint32 As UInt32
For Each cmicWmiObj As ManagementObject In cmicWmi.Get
Uint32 = cmicWmiObj(&signature&)
TextBox1.Text = Uint32.ToString
'获得CPU序列号
Dim Wmi As New System.Management.ManagementObjectSearcher(&SELECT * FROM Win32_Processor&)
Dim Uint32 As String
For Each WmiObj As ManagementObject In Wmi.Get
Uint32 = WmiObj(&ProcessorId&)
TextBox1.Text = Uint32
'获得硬盘总容量
Dim Wmi As New System.Management.ManagementObjectSearcher(&SELECT * FROM Win32_DiskDrive&)
Dim Uint64 As UInt64
For Each WmiObj As ManagementObject In Wmi.Get
Uint64 = WmiObj(&size&)
TextBox1.Text = Uint64.ToString
首先,引用System.Management;然后在代码中Imports System.Management;
Copyright&
Powered by 编程入门网 All Rights Reserved. |下次自动登录
现在的位置:
& 综合 & 正文
HOW TO:获取硬盘物理序列号(VB.NET)
参考了一个C#的,原出处不知在哪了.
Public Class PhysicalDriveDemo
Public Shared Sub Run()
Console.WriteLine(PhysicalDrive.GetSerialNumber(<span style="COLOR: #))
End SubEnd Class
Imports SystemImports System.Collections.GenericImports System.TextImports System.Runtime.InteropServices
Public Class PhysicalDrive
'&StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi)& _
Friend Structure IDSECTOR
Public wGenConfig As Int16
Public wNumCyls As Int16
Public wReserved As Int16
Public wNumHeads As Int16
Public wBytesPerTrack As Int16
Public wBytesPerSector As Int16
Public wSectorsPerTrack As Int16
&MarshalAs(UnmanagedType.ByValArray, SizeConst:=3)& _
Public wVendorUnique() As Int16
&MarshalAs(UnmanagedType.ByValTStr, SizeConst:=20)& _
Public sSerialNumber As String
Public wBufferType As Int16
Public wBufferSize As Int16
Public wECCSize As Int16
&MarshalAs(UnmanagedType.ByValTStr, SizeConst:=8)& _
Public sFirmwareRev As String
&MarshalAs(UnmanagedType.ByValTStr, SizeConst:=40)& _
Public sModelNumber As String
Public wMoreVendorUnique As Int16
Public wDoubleWordIO As Int16
Public wCapabilities As Int16
Public wReserved1 As Int16
Public wPIOTiming As Int16
Public wDMATiming As Int16
Public wBS As Int16
Public wNumCurrentCyls As Int16
Public wNumCurrentHeads As Int16
Public wNumCurrentSectorsPerTrack As Int16
Public ulCurrentSectorCapacity As Int32
Public wMultSectorStuff As Int16
Public ulTotalAddressableSectors As Int32
Public wSingleWordDMA As Int16
Public wMultiWordDMA As Int16
&MarshalAs(UnmanagedType.ByValArray, SizeConst:=128)& _
Public bReserved() As Byte
'End Structure
&StructLayout(LayoutKind.Sequential)& _
Friend Structure DRIVERSTATUS
Public bDriverError As Byte
Public bIDEStatus As Byte
&MarshalAs(UnmanagedType.ByValArray, SizeConst:=<span style="COLOR: #)& _
Public bReserved() As Byte
&MarshalAs(UnmanagedType.ByValArray, SizeConst:=<span style="COLOR: #)& _
Public dwReserved() As Int32
End Structure
&StructLayout(LayoutKind.Sequential)& _
Friend Structure SENDCMDOUTPARAMS
Public cBufferSize As Int32
Public DriverStatus As DRIVERSTATUS
&MarshalAs(UnmanagedType.ByValArray, SizeConst:=<span style="COLOR: #3)& _
Public bBuffer() As Byte
End Structure
'&StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi)& _
Friend Structure SRB_IO_CONTROL
Public HeaderLength As Int32
&MarshalAs(UnmanagedType.ByValTStr, SizeConst:=8)& _
Public Signature As String
Public Timeout As Int32
Public ControlCode As Int32
Public ReturnCode As Int32
Public Length As Int32
'End Structure
&StructLayout(LayoutKind.Sequential)& _
Friend Structure IDEREGS
Public bFeaturesReg As Byte
Public bSectorCountReg As Byte
Public bSectorNumberReg As Byte
Public bCylLowReg As Byte
Public bCylHighReg As Byte
Public bDriveHeadReg As Byte
Public bCommandReg As Byte
Public bReserved As Byte
End Structure
&StructLayout(LayoutKind.Sequential)& _
Friend Structure SENDCMDINPARAMS
Public cBufferSize As Int32
Public irDriveRegs As IDEREGS
Public bDriveNumber As Byte
&MarshalAs(UnmanagedType.ByValArray, SizeConst:=<span style="COLOR: #)& _
Public bReserved() As Byte
&MarshalAs(UnmanagedType.ByValArray, SizeConst:=<span style="COLOR: #)& _
Public dwReserved() As Int32
Public bBuffer As Byte
End Structure
&StructLayout(LayoutKind.Sequential)& _
Friend Structure GETVERSIONOUTPARAMS
Public bVersion As Byte
Public bRevision As Byte
Public bReserved As Byte
Public bIDEDeviceMap As Byte
Public fCapabilities As Int32
&MarshalAs(UnmanagedType.ByValArray, SizeConst:=<span style="COLOR: #)& _
Public dwReserved() As Int32
End Structure
&DllImport("kernel32.dll", SetLastError:=True)& _
Private Shared Function CloseHandle( _
ByVal hObject As Int32 _
) As Integer
End Function
&DllImport("kernel32.dll")& _
Private Overloads Shared Function DeviceIoControl( _
ByVal hDevice As Int32, _
ByVal dwIoControlCode As Int32, _
ByRef lpInBuffer As SENDCMDINPARAMS, _
ByVal nInBufferSize As Integer, _
ByRef lpOutBuffer As SENDCMDOUTPARAMS, _
ByVal nOutBufferSize As Integer, _
ByRef lpbytesReturned As Int32, _
ByVal lpOverlapped As Integer _
) As Integer
End Function
&DllImport("kernel32.dll")& _
Private Overloads Shared Function DeviceIoControl( _
ByVal hDevice As Int32, _
ByVal dwIoControlCode As Int32, _
ByVal lpInBuffer As Integer, _
ByVal nInBufferSize As Integer, _
ByRef lpOutBuffer As GETVERSIONOUTPARAMS, _
ByVal nOutBufferSize As Integer, _
ByRef lpbytesReturned As Int32, _
ByVal lpOverlapped As Integer _
) As Integer
End Function
&DllImport("kernel32.dll")& _
Private Shared Function CreateFile( _
ByVal lpFileName As String, _
ByVal dwDesiredAccess As Int32, _
ByVal dwShareMode As Int32, _
ByVal lpSecurityAttributes As Integer, _
ByVal dwCreationDisposition As Int32, _
ByVal dwFlagsAndAttributes As Int32, _
ByVal hTemplateFile As Integer _
) As Int32
End Function
Private Const GENERIC_READ As Int32 = &H
Private Const GENERIC_WRITE As Int32 = &H
Private Const FILE_SHARE_READ As Int32 = &H1
Private Const FILE_SHARE_WRITE As Int32 = &H2
Private Const OPEN_EXISTING As Int32 = <span style="COLOR: #
Private Const INVALID_HANDLE_VALUE As Int32 = &HFFFFFFFF
Private Const DFP_GET_VERSION As Int32 = &H74080
Private Const IDE_ATAPI_IDENTIFY As Integer = &HA1
Private Const IDE_ATA_IDENTIFY As Integer = &HEC
Private Const IDENTIFY_BUFFER_SIZE As Integer = <span style="COLOR: #2
Private Const DFP_RECEIVE_DRIVE_DATA As Int32 = &H7C088
''' &summary&
''' 获取物理序列号
''' &/summary&
''' &param name="id"&系统硬盘序号,0-255&/param&
Public Shared Function GetSerialNumber(ByVal id As Byte) As String
Dim os As OperatingSystem = Environment.OSVersion
If os.Platform && PlatformID.Win32NT Then
Throw New NotSupportedException("仅支持2000/XP/2003")
If os.Version.Major & <span style="COLOR: # Then
Throw New NotSupportedException("仅支持2000/XP/2003")
Return Read(id)
End Function
Private Shared Function Read(ByVal drive As Byte) As String
Dim driveName As String = String.Concat("//./PhysicalDrive", drive.ToString())
Dim device As Int32 = CreateFile( _
driveName, _
GENERIC_READ Or GENERIC_WRITE, _
FILE_SHARE_READ Or FILE_SHARE_WRITE, _
<span style="COLOR: #, _
OPEN_EXISTING, _
<span style="COLOR: #, _
<span style="COLOR: #)
If device = INVALID_HANDLE_VALUE Then
Dim verPara As New GETVERSIONOUTPARAMS()
Dim bytRv As Int32 = <span style="COLOR: #
If DeviceIoControl( _
DFP_GET_VERSION, _
<span style="COLOR: #, _
<span style="COLOR: #, _
verPara, _
Marshal.SizeOf(verPara), _
<span style="COLOR: # _
) && <span style="COLOR: # Then
If verPara.bIDEDeviceMap & <span style="COLOR: # Then
Dim bIDCmd As Byte = CByte(IIf((verPara.bIDEDeviceMap && drive And &H10) && <span style="COLOR: #, IDE_ATAPI_IDENTIFY, IDE_ATA_IDENTIFY))
Dim scip As New SENDCMDINPARAMS()
Dim scop As New SENDCMDOUTPARAMS()
.cBufferSize = IDENTIFY_BUFFER_SIZE
.bDriveNumber = drive
With .irDriveRegs
.bFeaturesReg = <span style="COLOR: #
.bSectorCountReg = <span style="COLOR: #
.bCylLowReg = <span style="COLOR: #
.bCylHighReg = <span style="COLOR: #
.bDriveHeadReg = CByte((&HA0 Or ((drive And <span style="COLOR: #) && <span style="COLOR: #)))
.bCommandReg = bIDCmd
If DeviceIoControl(device, DFP_RECEIVE_DRIVE_DATA, scip, Marshal.SizeOf(scip), scop, Marshal.SizeOf(scop), bytRv, <span style="COLOR: #) && <span style="COLOR: # Then
Dim s As New StringBuilder()
Dim i As Integer
For i = <span style="COLOR: # To <span style="COLOR: # - <span style="COLOR: # Step <span style="COLOR: #
s.Append(ChrW(scop.bBuffer((i + <span style="COLOR: #))))
s.Append(ChrW(scop.bBuffer(i)))
CloseHandle(device)
Return s.ToString().Trim()
CloseHandle(device)
End Function
&&&&推荐文章:
【上篇】【下篇】VB6.0获取电脑硬盘的序列号,若序列号存在,获取到会显示在TextBox文本框中,程序还是比较粗糙的,界面方面只是一个雏形,可为此方面有需要的提供参考吧。
VERSION 5.00
Begin VB.Form Form1
ClientHeight
ClientLeft
ClientWidth
ScaleHeight
ScaleWidth
StartUpPosition =
Begin VB.TextBox Text2
Begin VB.TextBox Text1
mandButton CmdLocalID
&Command3&
mandButton CmdRegID
&Command2&
mandButton CmndCheckID
&Command1&
Attribute VB_Name = &Form1&
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Private Declare Function GetVolumeInformation Lib &kernel32& _
Alias &GetVolumeInformationA& (ByVal lpRootPathName As String, _
ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, _
lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, _
lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, _
ByVal nFileSystemNameSize As Long) As Long
'得到某一磁盘分区的信息,如C:
Option Explicit
Private Regid, Localid As Long
Private Sub CmdLocalID_Click()
'根据C盘序列号得到原ID
Dim Driver, VolName, Fsys As String
Dim volNumber, MCM, FSF As Long
Driver = &c:\&
Dim res As Long
res = GetVolumeInformation(Driver, VolName, 127, volNumber, MCM, FSF, Fsys, 127)
'volNumber是C盘序列号
Localid = volNumber / 2 +
Text1.Text = Localid
Private Sub CmdRegID_Click()
'根据原ID算出注册ID
If IsNumeric(Text1.Text) Then
Regid = CLng(Text1.Text) / 4 * 3 +
Text2.Text = Regid
Private Sub CmndCheckID_Click()
'验证注册ID
Dim Driver, VolName, Fsys As String
Dim volNumber, MCM, FSF As Long
Driver = &c:\&
Dim res As Long
res = GetVolumeInformation(Driver, VolName, 127, volNumber, MCM, FSF, Fsys, 127)
Dim Tid As Long
Tid = volNumber / 2 +
If Regid = Tid / 4 * 3 +
MsgBox &正确!&
MsgBox &错误!&
本类推荐文章
本类最新更新
最新源码下载}

我要回帖

更多关于 vb读取硬盘序列号 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信