DiskSerial.DLL使用说明
1
DiskSerial.DLL 版本2.11.0120 使用说明
一、动态库说明明:
二、函数说明:
三、函数调用
参数
及返回值说明:
四、在Microsoft Visual C++中调用:
五、在Borland C++ Builder 中调用:
六、在Borland Dephi 中调用:
七、在Visual Basic 中调用:
八、在Microsoft Visual Foxpro 中调用:
九、在Sybase Power Builder 中调用:
十、调用实例下载地址:
一、动态库说明明:
该动态库能获取硬盘的序列号、
型号
、修订号、磁盘缓存大小、磁头数、柱面数、每磁
道的扇区数;能获取CPU 的序列号。
二、函数说明:
1、GetDiskSerial:获取硬盘序列号、型号、修订号等物理参数。
2、GetSerialNumber:获取硬盘的物理序列号。
3、GetModelNumber:获取硬盘的型号。
4、GetRevisionNumber:获取硬盘的修订号。
5、GetBufferSize:获取硬盘的缓存大小。
6、GetDiskCylinders:获取硬盘的柱面数。
7、GetDiskHeads:获取硬盘的磁头数。
8、GetSectorsOfTrack:获取硬盘每磁道的扇区数。
9、GetCPUSerialNumber:获取CPU 的序列号。
三、函数调用参数及返回值说明:
1、GetDiskSerial:
参数:
nDrive
硬盘序号,在WINDOWS NT 4.0、WINDOWS 2000和WINDOWS XP 中,一般设
为0 即可,所对应的硬盘序号为磁盘
管理
中的硬盘,即磁盘管理中的磁盘0参数应设为
0,磁盘1则参数应设为1;在WINDOWS 95、WINDOWS 98和WINDOWS ME 中,
磁盘序号与硬盘所连接的IDE 接口的关,如果硬盘为第一个IDE 接口的主盘,参数设
为0,从盘设为1,为第二个IDE 接口的主盘参数为2,从盘为3。
lpDiskSerial
指向DISK_SERIAL
结构
的指针,该结构接收关于硬盘的物理参数。基中:
lpSerialNumber:指向接收硬盘序列号字符串缓冲区的指针。
lpModelNumber:指向接收硬盘型号字符串缓冲区的指针。
lpRevisionNumber:指向接收硬盘修订号字符串缓冲区的指针。
DiskSerial.DLL使用说明
2
lBufferSize:返回硬盘的缓存大小。
lCylinders:返回硬盘的柱面数。
lHeads:返回硬盘的磁头数。
lSectors:返回硬盘每磁道的扇区数。
lpRegNumber
指向一注册序列号字符串缓冲区的指针,如果无合法的注册序列号,请初始化为形
如“0000-0000-0000-0000”的字符串常量。
返回值:
如果函数调用成功,则返回值为非零值;如果函数调用失败,返回值为0。
2、GetSerialNumber:
参数数:
nDrive
参数说明见函数GetDiskSerial。
lpBuffer
指向接收硬盘序列号字符串缓冲区的指针。
lpRegNumber
参数说明见函数GetDiskSerial。
返回值:
如果函数调用成功,则返回值为非零值,其值为返回的硬盘序列号字符串的长度;如果
函数调用失败,返回值为0。
3、GetModelNumber:
参数:
nDrive
参数说明见函数GetDiskSerial。
lpBuffer
指向接收硬盘型号字符串缓冲区的指针。
lpRegNumber
参数说明见函数GetDiskSerial。
返回值:
如果函数调用成功,则返回值为非零值,其值为返回的硬盘型号字符串的长度;如果函
数调用失败,返回值为0。
4、GetRevisionNumber:
参数:
nDrive
参数说明见函数GetDiskSerial。
lpBuffer
指向接收硬盘修订号字符串缓冲区的指针。
lpRegNumber
参数说明见函数GetDiskSerial。
返回值:
如果函数调用成功,则返回值为非零值,其值为返回的硬盘修订号字符串的长度;如果
DiskSerial.DLL使用说明
3
函数调用失败,返回值为0。
5、GetBufferSize
参数:
nDrive
参数说明见函数GetDiskSerial。
lpRegNumber
参数说明见函数GetDiskSerial。
返回值:
如果函数调用成功,则返回值为非零值,其值为硬盘缓存的大小;如果函数调用失败,
返回值为0。
6、GetDiskCylinders
参数:
nDrive
参数说明见函数GetDiskSerial。
lpRegNumber
参数说明见函数GetDiskSerial。
返回值:
如果函数调用成功,则返回值为非零值,其值为硬盘的柱面数;如果函数调用失败,返
回值为0。
7、GetDiskHeads
参数:
nDrive
参数说明见函数GetDiskSerial。
lpRegNumber
参数说明见函数GetDiskSerial。
返回值:
如果函数调用成功,则返回值为非零值,其值为硬盘的磁头数;如果函数调用失败,返
回值为0。
8、GetSectorsOfTrack
参数:
nDrive
参数说明见函数GetDiskSerial。
lpRegNumber
参数说明见函数GetDiskSerial。
返回值:
如果函数调用成功,则返回值为非零值,其值为硬盘的每磁道的扇区数;如果函数调用
失败,返回值为0。
9、GetCPUSerialNumber
参数:
DiskSerial.DLL使用说明
4
lpCpuSerial
指向接收CPU 序列号字符串缓冲区的指针。
lpRegNumber
参数说明见函数GetDiskSerial。
返回值:
如果函数调用成功,则返回值为非零值,其值为返回的CPU 序列号字符串的长度;如
果函数调用失败,返回值为0。
四、在Microsoft Visual C++中的调用:
1、包含头
文件
:
#include “DiskSerial.h”
2、输入LIB 库文件:
进入
菜单
Project settings…|Link,在Object/library modules编辑框中输入:
DiskSerial.Lib
3、调用:
TCHAR lpBuffer[MAX_PATH], szBuffer[MAX_PATH];
DISK_SERIAL ds;
if(GetDiskSerial(0, &ds, “0000-0000-0000-0000”))
{
sprintf(szBuffer,
“Serial Number:%s,/nModel Number:%s,/nRevision Number:%s,/nBuffer
Size:%ld,/nHeads:%ld,/nCylinders:%ld,/nSectors:%ld.”,
ds.lpSerialNumber, ds.lpModelNumber, ds.lpRevisionNumber,
ds.lBufferSize, ds.lHeads, ds.lCylinders, ds.lSectors);
MessageBox(NULL, szBuffer, NULL, MB_OK);
}
if(GetCPUSerialNumber(lpBuffer, “0000-0000-0000-0000”) > 0)
MessageBox(NULL, lpBuffer, “CPU Serial Number”, MB_OK);
五、在Borland C++ Builder 中的调用:
1、包含头文件:
#include “DiskSerial.h”
2、输入LIB 库文件:
进入菜单Project |Add to project…,选择文件:DiskSerial.Lib
3、调用:
TCHAR lpBuffer[MAX_PATH], szBuffer[MAX_PATH];
DISK_SERIAL ds;
if(GetDiskSerial(0, &ds, “0000-0000-0000-0000”))
{
ShowMessage(ds.lpSerialNumber);
ShowMessage(ds.lpModelNumber);
ShowMessage(ds.lpRevisionNumber);
ShowMessage(IntToStr(ds.lBufferSize));
ShowMessage(IntToStr(ds.lHeads));
DiskSerial.DLL使用说明
5
ShowMessage(IntToStr(ds.lCylinders));
ShowMessage(IntToStr(ds.lSectors));
}
if(GetCPUSerialNumber(lpBuffer, “0000-0000-0000-0000”) > 0)
ShowMessage(lpBuffer);
六、在Borland Dephi 中的调用:
1、将DiskSerial.pas 加入工程中:
进入菜单Projrct|Add to project…,选择文件:DiskSerial.pas
2、在程序中uses部分加入DiskSerial
uses
…, DiskSerial
3、程序调用:
lpBuffer:array[0..255] of char;
ds:DISK_SERIAL;
if(GetDiskSerial(0, ds, ‘0000-0000-0000-0000’) then
begin
ShowMessage(lpDiskSerial.lpSerialNumber);
ShowMessage(lpDiskSerial.lpModelNumber);
ShowMessage(lpDiskSerial.lpRevisionNumber);
ShowMessage(IntToStr (lpDiskSerial.lBufferSize));
ShowMessage(IntToStr (lpDiskSerial.lHeads));
ShowMessage(IntToStr (lpDiskSerial.lCylinders));
ShowMessage(IntToStr (lpDiskSerial.lSectors));
end;
if(GetCPUSerialNumber(lpBuffer, ‘0000-0000-0000-0000’) > 0) then
ShowMessage(lpBuffer);
七、在Microsoft Visual Basic 中的调用:
1、将DiskSerial.bas文件加入工程中:
进入菜单Project|Add Module|Existing,选择DiskSerial.bas文件
2、调用:
Dim ds As DISK_SERIAL
Dim nRet As Long
Dim lpBuffer As String
lpBuffer = Space(MAX_PATH)
If (GetDiskSerial(0, ds, “0000-0000-0000-0000”)) Then
nRet = MessageBox(0, ds.lpSerialNumber, "Serial Number", MB_OK)
nRet = MessageBox(0, ds.lpModelNumber, "Model Number", MB_OK)
nRet = MessageBox(0, ds.lpRevisionNumber, "Revision Number", MB_OK)
nRet = MessageBox(0, ds.lBufferSize, "Buffer Size", MB_OK)
nRet = MessageBox(0, ds.lHeads, "Heads", MB_OK)
DiskSerial.DLL使用说明
6
nRet = MessageBox(0, ds.lCylinders, "Cylinders", MB_OK)
nRet = MessageBox(0, ds.lSectors, "Sectors", MB_OK)
End If
If (GetCPUSerialNumber(lpBuffer, “0000-0000-0000-0000”) > 0) Then
nRet = MessageBox(0, lpBuffer, "CPU Serial Number", MB_OK)
End If
八、在Microsoft Visual Foxpro 中的调用:
1、申明:
DECLARE INTEGER GetDiskSerial IN DiskSerial INTEGER nDrive ,;
STRING @lpDiskSerial, STRING lpRegNumber
DECLARE INTEGER GetCPUSerialNumber IN DiskSerial STRING @lpBuffer,;
STRING lpRegNumber
2、调用:
lpDiskSerial = space(260)
size=0
lpBuffer = space(260)
size = GetDiskSerial(thisform.txtDriveNumber.value, @lpDiskSerial , ;
“0000-0000-0000-0000”)
IF(size > 0)
thisform.txtSerialNumber.value = alltrim(SUBSTR(lpDiskSerial,1,32))
thisform.txtModelNumber.value = alltrim(SUBSTR(lpDiskSerial,33,32))
thisform.txtRevisionNumber.value = alltrim(SUBSTR(lpDiskSerial,65,32))
thisform.txtBufferSize.value = alltrim(STR(ASC(SUBSTR(lpDiskSerial,100,1)) * ;
16777216 + ASC(SUBSTR(lpDiskSerial,99, 1)) * 65536 +;
ASC(SUBSTR(lpDiskSerial,98, 1)) * 256 + ASC(SUBSTR(lpDiskSerial,97, 1))))
thisform.txtCylinders.value = alltrim(STR(ASC(SUBSTR(lpDiskSerial,104,1)) * ;
16777216 + ASC(SUBSTR(lpDiskSerial,103, 1)) * 65536 + ;
ASC(SUBSTR(lpDiskSerial,102, 1)) * 256 + ASC(SUBSTR(lpDiskSerial,101, 1))))
thisform.txtHeads.value = alltrim(STR(ASC(SUBSTR(lpDiskSerial,108,1)) * ;
16777216 + ASC(SUBSTR(lpDiskSerial,107, 1)) * 65536 +;
ASC(SUBSTR(lpDiskSerial,106, 1)) * 256 + ASC(SUBSTR(lpDiskSerial,105, 1))))
thisform.txtSectors.value = alltrim(STR(ASC(SUBSTR(lpDiskSerial,112,1)) * ;
16777216 + ASC(SUBSTR(lpDiskSerial,111, 1)) * 65536 + ;
ASC(SUBSTR(lpDiskSerial,110, 1)) * 256 + ASC(SUBSTR(lpDiskSerial,109, 1))))
ENDIF
size = GetCPUSerialNumber(lpBuffer, “0000-0000-0000-0000”)
IF (size > 0) then
thisform.txtCPUSerial.value = alltrim(lpBuffer(1, size))
ENDIF
九、在Sybase Power Builder 中调用:
DiskSerial.DLL使用说明
7
1、建立DISK_SERIAL 结构类型:
进入菜单,选择New…|Object,选择Structure,分别输入以下变量:
Type Variable Name
Char lpSerialNumber[32]
Char lpModelNumber[32]
Char lpRevisionNumber[32]
Long lBufferSize
Long lCylinders
Long lHeads
Long lSectors
存盘保存结构类型为DISK_SERIAL。
2、函数申明:
申明Local External Functions:
Function boolean GetDiskSerial(int nDrive, ref DISK_SERIAL lpDiskSerial, string
lpRegNumber) library "DiskSerial.DLL"
Function uint GetCPUSerialNumber(ref string lpBuffer, string lpRegNumber) library
"DiskSerial.DLL"
3、调用:
string lpBuffer
boolean bResult
uint uiResult
disk_serial ds
bResult = GetDiskSerial(0, ds, “0000-0000-0000-0000”)
if(bResult = TRUE) then
sle_serialnumber.Text = ds.lpSerialNumber
sle_modelnumber.text = ds.lpModelNumber
sle_revisionNumber.text = ds.lpRevisionNumber
sle_BufferSize.text = String(ds.lBufferSize)
sle_Heads.text = String(ds.lheads)
sle_Cylinders.text = String(ds.lcylinders)
sle_Sectors.text = String(ds.lsectors)
end if
uiResult = GetCPUSerialNumber(lpBuffer, “0000-0000-0000-0000”)
if(uiResult > 0) then
sle_CPUSerial.text = lpBuffer
end if
十、调用实例下载地址:
在MS Visual C++中调用实例:
MFC: http://vip.6to23.com/songdai/download/DiskSerial/MFC.zip
API: http://vip.6to23.com/songdai/download/DiskSerial/API.zip
在Borland C++ Builder 中调用实例:
DiskSerial.DLL使用说明
8
http://vip.6to23.com/songdai/download/DiskSerial/BCB.zip
在Borland Dephi 中调用实例:
http://vip.6to23.com/songdai/download/DiskSerial/Dephi.zip
在MS Visual Basic 中调用实例:
http://vip.6to23.com/songdai/download/DiskSerial/VB.zip
在MS Visual Foxpro 中调用实例:
http://vip.6to23.com/songdai/download/DiskSerial/VFP.zip
在Sybase Power Builder 中调用实例:
http://vip.6to23.com/songdai/download/DiskSerial/PB.zip
//模块化调用
象这样的东西还是做成一个类模块吧!
'Call Module : CSystem
Option Explicit
Private Type SYSTEM_INFO
wProcessorArchitecture As Integer
wReserved As Integer
dwPageSize As Long
lpMinimumApplicationAddress As Long
lpMaximumApplicationAddress As Long
dwActiveProcessorMask As Long
dwNumberOfProcessors As Long
dwProcessorType As Long
dwAllocationGranularity As Long
wProcessorLevel As Integer
wProcessorRevision As Integer
End Type
Private Declare Sub GetSystemInfo Lib "KERNEL32" (lpSystemInfo As SYSTEM_INFO)
Private iWinMajor As Integer
Private iWinMinor As Integer
Private sMode As String
Private sys As SYSTEM_INFO
Private Sub Class_Initialize()
Dim dw As Long, c As Integer
dw = GetVersion()
iWinMajor = dw And &HFF&
iWinMinor = (dw And &HFF00&) / &H100&
sMode = IIf(dw And &H80000000, "Windows 95", "Windows NT")
GetSystemInfo sys
End Sub
Property Get FreePhysicalMemory() As Long
Dim mem As MEMORYSTATUS
mem.dwLength = Len(mem)
GlobalMemoryStatus mem
FreePhysicalMemory = mem.dwAvailPhys / 1024
End Property
Property Get TotalPhysicalMemory() As Long
Dim mem As MEMORYSTATUS
mem.dwLength = Len(mem)
GlobalMemoryStatus mem
TotalPhysicalMemory = mem.dwTotalPhys / 1024
End Property
Property Get FreeVirtualMemory() As Long
Dim mem As MEMORYSTATUS
mem.dwLength = Len(mem)
GlobalMemoryStatus mem
FreeVirtualMemory = mem.dwAvailVirtual / 1024
End Property
Property Get TotalVirtualMemory() As Long
Dim mem As MEMORYSTATUS
mem.dwLength = Len(mem)
GlobalMemoryStatus mem
TotalVirtualMemory = mem.dwTotalVirtual / 1024
End Property
Property Get FreePageFile() As Long
Dim mem As MEMORYSTATUS
mem.dwLength = Len(mem)
GlobalMemoryStatus mem
FreePageFile = mem.dwAvailPageFile / 1024
End Property
Property Get TotalPageFile() As Long
Dim mem As MEMORYSTATUS
mem.dwLength = Len(mem)
GlobalMemoryStatus mem
TotalPageFile = mem.dwTotalPageFile / 1024
End Property
Property Get MemoryLoad() As Long
Dim mem As MEMORYSTATUS
mem.dwLength = Len(mem)
GlobalMemoryStatus mem
MemoryLoad = mem.dwMemoryLoad
End Property
Property Get WinMajor() As Integer
WinMajor = iWinMajor
End Property
Property Get WinMinor() As Integer
WinMinor = iWinMinor
End Property
Property Get WinVersion() As Single
WinVersion = iWinMajor + (iWinMinor / 100)
End Property
Property Get Processor() As String
If sMode = "Windows 95" Then
Processor = "Intel "
Select Case sys.dwProcessorType
Case 386
Processor = Processor & "386"
Case 486
Processor = Processor & "486"
Case 586
Processor = Processor & "586"
End Select
Else
Select Case sys.wProcessorArchitecture
Case PROCESSOR_ARCHITECTURE_INTEL
Processor = "Intel "
Select Case sys.wProcessorLevel
Case 3, 4
Processor = Processor & sys.wProcessorLevel & "86"
Case 5
Processor = Processor & "Pentium"
Case Else
Processor = Processor & "Level " & sys.wProcessorLevel
End Select
Case PROCESSOR_ARCHITECTURE_MIPS
Processor = "MIPS R" & sys.wProcessorLevel & "000"
Case PROCESSOR_ARCHITECTURE_ALPHA
Processor = "Alpha " & sys.wProcessorLevel
Case PROCESSOR_ARCHITECTURE_PPC
Processor = "Power PC " & IIf(sys.wProcessorLevel > 9, "6", "60") & _
sys.wProcessorLevel
Case PROCESSOR_ARCHITECTURE_UNKNOWN
Processor = "Unknown"
Case Else
Processor = "Other " & sys.wProcessorArchitecture & " " & sys.wProcessorLevel
End Select
End If
End Property
Property Get ProcessorCount() As String
ProcessorCount = sys.dwNumberOfProcessors
End Property
Property Get Mode() As String
Mode = sMode
End Property
Property Get WindowsDir() As String
Dim s As String, c As Long
s = String$(cMaxPath, 0)
c = GetWindowsDirectory(s, cMaxPath)
WindowsDir = Left(s, c)
End Property
Property Get SystemDir() As String
Dim s As String, c As Long
s = String$(cMaxPath, 0)
c = GetSystemDirectory(s, cMaxPath)
SystemDir = Left(s, c)
End Property
Property Get User() As String
Dim s As String, c As Long
c = 80: s = String$(c + 1, 0)
' Includes null in returned length, unlike all other API functions
If GetUserName(s, c) Then User = Left$(s, c - 1)
End Property
Property Get Machine() As String
Dim s As String, c As Long
c = 16: s = String$(16, 0)
If GetComputerName(s, c) Then Machine = Left$(s, c)
End Property