关闭

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

标签: 编程语言stringintegerborlandmicrosoft
2048人阅读 评论(1) 收藏 举报
分类:

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
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:702166次
    • 积分:13792
    • 等级:
    • 排名:第903名
    • 原创:650篇
    • 转载:67篇
    • 译文:1篇
    • 评论:180条
    文章分类
    最新评论