DiskSerial.DLL使用及编程语言中如何调用及模块化

    技术2022-05-11  94

    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

     


    最新回复(0)