发新话题
打印

[基础] 有关读取主板序列号的问题

有关读取主板序列号的问题

在网上看到以下的代码,用WMI来读取主板序列号:

  Private   Sub   wmiBaseBoardInfo()   
          Dim   wmiObjSet   As   SWbemObjectSet   
          Dim   obj   As   SWbemObject   
          Set   wmiObjSet   =   GetObject("winmgmts:\\.").InstancesOf("Win32_BaseBoard")   
          On   Local   Error   Resume   Next   
          For   Each   obj   In   wmiObjSet   
                  MsgBox   "主板序列号:"   &   obj.SerialNumber   
          Next   
  End   Sub

------------------------源代码开始--------------------------------   
  Private   Declare   Function   CloseHandle   Lib   "kernel32"   (ByVal   hObject   As   Long)   As   Long   
  Private   Declare   Function   CreateFile   Lib   "kernel32"   Alias   "CreateFileA"   (ByVal   lpFileName   As   String,   ByVal   dwDesiredAccess   As   Long,   ByVal   dwShareMode   As   Long,   lpSecurityAttributes   As   Long,   ByVal   dwCreationDisposition   As   Long,   ByVal   dwFlagsAndAttributes   As   Long,   ByVal   hTemplateFile   As   Long)   As   Long   
  Private   Declare   Function   DeviceIoControl   Lib   "kernel32"   (ByVal   hDevice   As   Long,   ByVal   dwIoControlCode   As   Long,   lpInBuffer   As   Any,   ByVal   nInBufferSize   As   Long,   lpOutBuffer   As   Any,   ByVal   nOutBufferSize   As   Long,   lpBytesReturned   As   Long,   lpOverlapped   As   Long)   As   Long   
  Private   Declare   Sub   CopyMemory   Lib   "kernel32"   Alias   "RtlMoveMemory"   (Destination   As   Any,   Source   As   Any,   ByVal   Length   As   Long)   
   
  Type   IDERegs   
              bFeaturesReg           As   Byte   
              bSectorCountReg     As   Byte   
              bSectorNumberReg   As   Byte   
              bCylLowReg               As   Byte   
              bCylHighReg             As   Byte   
              bDriveHeadReg         As   Byte   
              bCommandReg             As   Byte   
              bReserved                 As   Byte   
  End   Type   
   
  Type   InParams   
              cBufferSize     As   Long   
              irDriveRegs     As   IDERegs   
              bDriveNumber   As   Byte   
              bReserved(0   To   19)       As   Byte   
  End   Type   
   
   
  Dim   inbuff   As   InParams   
  Dim   outbuff(0   To   528)   As   Byte   
   
  Dim   SerialNumber   As   String   
   
   
  Function   ChangeByteOrder(s   As   Variant,   nLen   As   Long)   
  Dim   i   As   Long   
  Dim   pi   As   Long   
  pi   =   0   
  For   i   =   0   To   nLen   /   2   -   1   
          c   =   s(pi)   
          s(pi)   =   s(pi   +   1)   
          s(pi   +   1)   =   c   
          pi   =   pi   +   2   
  Next   
   
  End   Function   
   
  Dim   SerialNumber   As   String   
   
  Sub   Main()   
  Dim   nBytes   As   Long   
  Dim   nRet   As   Long   
  Dim   hVxD   As   Long   
   
  Dim   BSerialNumber(0   To   19)   As   Byte   
   
  inbuff.cBufferSize   =   512   
  inbuff.bDriveNumber   =   0   
  inbuff.irDriveRegs.bSectorCountReg   =   1   
  inbuff.irDriveRegs.bSectorNumberReg   =   1   
  inbuff.irDriveRegs.bCylHighReg   =   0   
  inbuff.irDriveRegs.bCylLowReg   =   0   
  inbuff.irDriveRegs.bDriveHeadReg   =   &HA0   
  inbuff.irDriveRegs.bCommandReg   =   &HEC   
  hVxD   =   CreateFile("[url=file://\\.\smartvsd]\\.\smartvsd[/url]",   0,   0,   0,   1,   0,   0)   
  nRet   =   DeviceIoControl(hVxD,   &H7C088,   inbuff,   Len(inbuff)   -   1,   outbuff(0),   528,   nBytes,   0)   
  If   nRet   >   0   Then   
          CopyMemory   BSerialNumber(0),   outbuff(36),   20   
          SerialNumber   =   StrConv(BSerialNumber,   vbUnicode)   
          SerialNumber   =   Trim(SerialNumber)   
  End   If   
  Call   CloseHandle(hVxD)   
   
  MsgBox   SerialNumber   
  End   Sub   
   
  '----------代码结束---------------------------------   


    但是在实际应用中总是提示用户定义类型未定义.编译错误,
    老大能帮我看看是哪里的问题吗?

TOP

你在工程,引用中引用WMI
换个头像,看见广告就眼红,直接封ID。

TOP

是引用以下的吗?还是不行

附件

wmi.JPG (12.48 KB)

2006-12-30 10:01

wmi.JPG

TOP

不是那个,应当是
Microsoft WMI Scripting V1.2 Library
换个头像,看见广告就眼红,直接封ID。

TOP

总算搞定了, 多谢!

TOP

发新话题