测试这个程序,能不能通过,若通过,我把源代码贴上去!
不知如何才能得到主板号!另外有SCSI硬盘的,可能否得到其序列号!
共同学习进步
下载地址:
http;//www.ydsoftware.com/Diskinfo.exe

解决方案 »

  1.   

    给我源码好吗[email protected] 这东西 好啊 
    能不能 不要加三方控件啊 发给我一份吧 谢谢
      

  2.   

    通过,给我一个源码。[email protected]
      

  3.   

    SCSI硬盘只有硬盘类型是对的。硬盘数量显示为0,型号和序列号为空。
      

  4.   

    好的,大家把Email留在上面,我会把源代码发给大家的,一定。
      

  5.   

    你这个程序是不错,不过最好是由程序将所有的硬盘信息自动得到。
    [email protected]
      

  6.   

    呵呵,我有delphi的源代码,留下mail,我发给你:(  7分也太……
      

  7.   

    也给我一份吧,谢谢![email protected]
      

  8.   

    通过
    不错,我也要
    [email protected]
      

  9.   

    var
      SerialNum : pdword;
      a, b : dword;
      Buffer  : array [0..255] of char;
    begin
      if GetVolumeInformation('c:\', Buffer, SizeOf(Buffer), SerialNum, a, b, nil, 0) then
        Label1.Caption := IntToStr(SerialNum^);
    end;
      

  10.   

    你可以试试以下的方法取的cpu的id,其它嘛让我想想}
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        Edit1: TEdit;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}
    function GetCpuId:longint;assembler;register;
    var
      temp:longint;
    begin
      asm
        PUSH    EBX
        PUSH    EDI
        MOV     EDI,EAX
        MOV     EAX,1
        DW      $A20F
        MOV     TEMP,EDX
        POP     EDI
        POP     EBX
      end;
      result:=temp;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      edit1.Text:=IntToHex(GetCpuId,8);
    end;
    end.
      

  11.   

    取得硬盘序列号:
    Function GetHardDiskSerieNummer : string;
    var
      Teller      : integer;
      Lus         : integer;
      SerieNummer : array[0..24] of char;
    begin
      result := '';
      Teller := 1;
      for Lus := 1 to 8 do
      begin
       SerieNummer[Teller] := chr((HardDiskGegevens[10+Lus] div 256 ));
       inc(Teller);
       SerieNummer[Teller] := CHR((HardDiskGegevens[10+Lus] mod 256 ));
       inc(Teller);
      end;
      result := SerieNummer;
     end;
      

  12.   

    好冬冬,也给我一份吧: [email protected]
      

  13.   

    以下代码取到的硬盘物理序列号与你的程序一致unit hdid;interface
    uses
      Windows, Controls,SysUtils,ShellAPI;  function GetIdeSerialNumber : pchar;
      
    implementationfunction GetIdeSerialNumber : pchar;
    const IDENTIFY_BUFFER_SIZE = 512;
    type
       TIDERegs = packed record
        bFeaturesReg     : BYTE; // Used for specifying SMART "commands".
        bSectorCountReg  : BYTE; // IDE sector count register
        bSectorNumberReg : BYTE; // IDE sector number register
        bCylLowReg       : BYTE; // IDE low order cylinder value
        bCylHighReg      : BYTE; // IDE high order cylinder value
        bDriveHeadReg    : BYTE; // IDE drive/head register
        bCommandReg      : BYTE; // Actual IDE command.
        bReserved        : BYTE; // reserved for future use.  Must be zero.
      end;
      TSendCmdInParams = packed record
        // Buffer size in bytes
        cBufferSize  : DWORD;
        // Structure with drive register values.
        irDriveRegs  : TIDERegs;
        // Physical drive number to send command to (0,1,2,3).
        bDriveNumber : BYTE;
        bReserved    : Array[0..2] of Byte;
        dwReserved   : Array[0..3] of DWORD;
        bBuffer      : Array[0..0] of Byte;  // Input buffer.
      end;
      TIdSector = packed record
        wGenConfig                 : Word;
        wNumCyls                   : Word;
        wReserved                  : Word;
        wNumHeads                  : Word;
        wBytesPerTrack             : Word;
        wBytesPerSector            : Word;
        wSectorsPerTrack           : Word;
        wVendorUnique              : Array[0..2] of Word;
        sSerialNumber              : Array[0..19] of CHAR;
        wBufferType                : Word;
        wBufferSize                : Word;
        wECCSize                   : Word;
        sFirmwareRev               : Array[0..7] of Char;
        sModelNumber               : Array[0..39] of Char;
        wMoreVendorUnique          : Word;
        wDoubleWordIO              : Word;
        wCapabilities              : Word;
        wReserved1                 : Word;
        wPIOTiming                 : Word;
        wDMATiming                 : Word;
        wBS                        : Word;
        wNumCurrentCyls            : Word;
        wNumCurrentHeads           : Word;
        wNumCurrentSectorsPerTrack : Word;
        ulCurrentSectorCapacity    : DWORD;
        wMultSectorStuff           : Word;
        ulTotalAddressableSectors  : DWORD;
        wSingleWordDMA             : Word;
        wMultiWordDMA              : Word;
        bReserved                  : Array[0..127] of BYTE;
      end;
      PIdSector = ^TIdSector;
      TDriverStatus = packed record
        // 驱动器返回的错误代码,无错则返回0
        bDriverError : Byte;
        // IDE出错寄存器的内容,只有当bDriverError 为 SMART_IDE_ERROR 时有效
        bIDEStatus   : Byte;
        bReserved    : Array[0..1] of Byte;
        dwReserved   : Array[0..1] of DWORD;
      end;
      TSendCmdOutParams = packed record
        // bBuffer的大小
        cBufferSize  : DWORD;
        // 驱动器状态
        DriverStatus : TDriverStatus;
        // 用于保存从驱动器读出的数据的缓冲区,实际长度由cBufferSize决定
        bBuffer      : Array[0..0] of BYTE;
      end;
      var hDevice : THandle;
          cbBytesReturned : DWORD;
          ptr : PChar;
          SCIP : TSendCmdInParams;
          aIdOutCmd : Array [0..(SizeOf(TSendCmdOutParams)+IDENTIFY_BUFFER_SIZE-1)-1] of Byte;
          IdOutCmd  : TSendCmdOutParams absolute aIdOutCmd;
      procedure ChangeByteOrder( var Data; Size : Integer );
      var ptr : PChar;
          i : Integer;
          c : Char;
      begin
        ptr := @Data;
        for i := 0 to (Size shr 1)-1 do begin
          c := ptr^;
          ptr^ := (ptr+1)^;
          (ptr+1)^ := c;
          Inc(ptr,2);
        end;
     end;
     begin
        Result := ''; // 如果出错则返回空串
        if SysUtils.Win32Platform=VER_PLATFORM_WIN32_NT then begin// Windows NT, Windows 2000
            // 提示! 改变名称可适用于其它驱动器,如第二个驱动器: '\\.\PhysicalDrive1\'
            hDevice := CreateFile( '\\.\PhysicalDrive0', GENERIC_READ or GENERIC_WRITE,
              FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0 );
        end else // Version Windows 95 OSR2, Windows 98
          hDevice := CreateFile( '\\.\SMARTVSD', 0, 0, nil, CREATE_NEW, 0, 0 );
          if hDevice=INVALID_HANDLE_VALUE then Exit;
         try
          FillChar(SCIP,SizeOf(TSendCmdInParams)-1,#0);
          FillChar(aIdOutCmd,SizeOf(aIdOutCmd),#0);
          cbBytesReturned := 0;
          // Set up data structures for IDENTIFY command.
          with SCIP do begin
            cBufferSize  := IDENTIFY_BUFFER_SIZE;
      //      bDriveNumber := 0;
            with irDriveRegs do begin
              bSectorCountReg  := 1;
              bSectorNumberReg := 1;
      //      if Win32Platform=VER_PLATFORM_WIN32_NT then bDriveHeadReg := $A0
      //      else bDriveHeadReg := $A0 or ((bDriveNum and 1) shl 4);
              bDriveHeadReg    := $A0;
              bCommandReg      := $EC;
            end;
          end;
          if not DeviceIoControl( hDevice, $0007c088, @SCIP, SizeOf(TSendCmdInParams)-1,
            @aIdOutCmd, SizeOf(aIdOutCmd), cbBytesReturned, nil ) then Exit;
        finally
          CloseHandle(hDevice);
        end;
        with PIdSector(@IdOutCmd.bBuffer)^ do begin
          ChangeByteOrder( sSerialNumber, SizeOf(sSerialNumber) );
          (PChar(@sSerialNumber)+SizeOf(sSerialNumber))^ := #0;
          Result := PChar(@sSerialNumber);
        end;
      end;  // 更多关于 S.M.A.R.T. ioctl 的信息可查看:
      //  http://www.microsoft.com/hwdev/download/respec/iocltapi.rtf  // MSDN库中也有一些简单的例子
      //  Windows Development -> Win32 Device Driver Kit ->
      //  SAMPLE: SmartApp.exe Accesses SMART stats in IDE drives  // 还可以查看 http://www.mtgroup.ru/~alexk
      //  IdeInfo.zip - 一个简单的使用了S.M.A.R.T. Ioctl API的Delphi应用程序
      
      // 注意: 
      
      //  WinNT/Win2000 - 你必须拥有对硬盘的读/写访问权限
      
      //  Win98 
      //    SMARTVSD.VXD 必须安装到 \windows\system\iosubsys
      //    (不要忘记在复制后重新启动系统)
    end.
      

  14.   

    我不要分,给源码就行,主要是学习
    [email protected]
      

  15.   

    发给我学习学习
    [email protected]
      

  16.   

    谢谢!我也要一份!
    [email protected]
      

  17.   

    我的PC机:
      测试能通过...
    IBM的服务器:
      能得出硬盘类型是SCSI,
      不能得到硬盘的序号,
      不能得到硬盘的型号,
      其它很正常(加密也很正常) 我以前再网上看到一个获取硬盘序列号的在大多数IDE硬盘能获取,
    但极个别的就不行,不知道是什么原因???  不知你用的是不是这个函数~~~
    另如果一台机器上有两块以上的网卡,你是怎么取的呢???
    能给我发一份源码吗,一起研究一下!!
    [email protected]
      

  18.   

    我也要一份,谢谢!
    [email protected]
      

  19.   

    给一份吧!一块研究一下。[email protected]
    Thanks
      

  20.   

    测试通过,不错!
    给我一份吧,谢谢![email protected]
      

  21.   

    我也要一份,谢谢了!
    [email protected]
      

  22.   

    我以前用过一个通过C的DLL函数取硬盘物理号的,但有时能出现乱码,不知怎么回事,你也发个给我吧,研究一下:[email protected]
      

  23.   

    谢谢,也给我一份: [email protected]
      

  24.   

    谢谢,也给我一份: [email protected]
      

  25.   

    小弟也想要一个,已经找了好久了。
    [email protected]
    谢谢
      

  26.   

    给我一个,先谢了!
    [email protected]
      

  27.   

    [email protected]这个时间来的还有吗?
      

  28.   

    楼主用的suipack  是D的吧??
      

  29.   

    DataInfo.dll 是黄朝宏写的吧 ,楼主是他本人吗?
      

  30.   

    [email protected] 
    很想要一份,多谢!
      

  31.   

    我的硬盘是scsi的,没检测出来,显示是ide
      

  32.   

    [email protected]
    顶吧,关注中
      

  33.   

    [email protected]
      好东东,等待中……
      

  34.   

    发个原码吧,谢谢,
    [email protected]
      

  35.   

    也发个原码给我吧
    [email protected]
    谢谢
      

  36.   

    通过不错,给我发一份吧!
    [email protected]
    谢谢!!!
      

  37.   

    我的 [email protected]
    谢谢!
      

  38.   

    如果是又硬盘或又网卡会取到那一个的呢?可以也给我一份吗?
    [email protected]
      

  39.   

    全方位的给下兄弟代码哦
    wyc23002163.com
      

  40.   

    谢谢!我也要一份!
    [email protected]
      

  41.   

    测试了一下,挺好用的,我也想要一份源码[email protected]谢了
      

  42.   

    好的,我喜欢,能给我一分RESOURE吗?
    [email protected]
      

  43.   

    呵呵。
    我也要。[email protected] you
      

  44.   

    是不是俺也可以来一份?
    嘿嘿!
    [email protected]
    thanks!
      

  45.   

    怎么down不了了?
    我也要一份,看看[email protected]
      

  46.   

    通过,给我一个源码。
    [email protected]
      

  47.   

    [email protected]
    我也要谢谢了!
      

  48.   

    楼上的取硬盘物理序列号的代码,当硬盘接在IDE2口时,无法正确取得正确的序列号。不过楼主的程序可以,在几台机器上测试都没有问题。能否给我发一份源码研究一下?!谢谢!![email protected]
      

  49.   

    up,顶先,[email protected]
    谢谢先!
      

  50.   

    也来一份学习学习。[email protected]
    谢谢啦!
      

  51.   

    顶,顶,顶
    [email protected]谢谢
      

  52.   

    测试完毕,正常,能否发一份源码。[email protected]
      

  53.   

    使用该方法在台式机上可以取得硬盘序列号,但在手提电脑就不行,请wywry (Wyatt) 帮忙看看如何解决//=======================================取硬盘序列号============================
    function GetIdeDiskSerialNumber(var SerialNumber: string; var ModelNumber: string;
     var FirmwareRev: string; var TotalAddressableSectors: ULong;
     var SectorCapacity: ULong; var SectorsPerTrack: Word): Boolean; //得到硬盘物理号
    type
     TSrbIoControl = packed record
       HeaderLength: ULong;
       Signature: array[0..7] of Char;
       Timeout: ULong;
       ControlCode: ULong;
       ReturnCode: ULong;
       Length: ULong;
     end;
     SRB_IO_CONTROL = TSrbIoControl;
     PSrbIoControl = ^TSrbIoControl; TIDERegs = packed record
       bFeaturesReg: Byte; // Used for specifying SMART "commands".
       bSectorCountReg: Byte; // IDE sector count register
       bSectorNumberReg: Byte; // IDE sector number register
       bCylLowReg: Byte; // IDE low order cylinder value
       bCylHighReg: Byte; // IDE high order cylinder value
       bDriveHeadReg: Byte; // IDE drive/head register
       bCommandReg: Byte; // Actual IDE command.
       bReserved: Byte; // reserved. Must be zero.
     end;
     IDEREGS = TIDERegs;
     PIDERegs = ^TIDERegs; TSendCmdInParams = packed record
       cBufferSize: DWORD;
       irDriveRegs: TIDERegs;
       bDriveNumber: Byte;
       bReserved: array[0..2] of Byte;
       dwReserved: array[0..3] of DWORD;
       bBuffer: array[0..0] of Byte;
     end;
     SENDCMDINPARAMS = TSendCmdInParams;
     PSendCmdInParams = ^TSendCmdInParams; TIdSector = packed record
       wGenConfig: Word;
       wNumCyls: Word;
       wReserved: Word;
       wNumHeads: Word;
       wBytesPerTrack: Word;
       wBytesPerSector: Word;
       wSectorsPerTrack: Word;
       wVendorUnique: array[0..2] of Word;
       sSerialNumber: array[0..19] of Char;
       wBufferType: Word;
       wBufferSize: Word;
       wECCSize: Word;
       sFirmwareRev: array[0..7] of Char;
       sModelNumber: array[0..39] of Char;
       wMoreVendorUnique: Word;
       wDoubleWordIO: Word;
       wCapabilities: Word;
       wReserved1: Word;
       wPIOTiming: Word;
       wDMATiming: Word;
       wBS: Word;
       wNumCurrentCyls: Word;
       wNumCurrentHeads: Word;
       wNumCurrentSectorsPerTrack: Word;
       ulCurrentSectorCapacity: ULong;
       wMultSectorStuff: Word;
       ulTotalAddressableSectors: ULong;
       wSingleWordDMA: Word;
       wMultiWordDMA: Word;
       bReserved: array[0..127] of Byte;
     end;
     PIdSector = ^TIdSector;const
     IDE_ID_FUNCTION = $EC;
     IDENTIFY_BUFFER_SIZE = 512;
     DFP_RECEIVE_DRIVE_DATA = $0007C088;
     IOCTL_SCSI_MINIPORT = $0004D008;
     IOCTL_SCSI_MINIPORT_IDENTIFY = $001B0501;
     DataSize = sizeof(TSendCmdInParams) - 1 + IDENTIFY_BUFFER_SIZE;
     BufferSize = sizeof(SRB_IO_CONTROL) + DataSize;
     W9xBufferSize = IDENTIFY_BUFFER_SIZE + 16;
    var
     hDevice: THandle;
     cbBytesReturned: DWORD;
     pInData: PSendCmdInParams;
     pOutData: Pointer; // PSendCmdOutParams
     Buffer: array[0..BufferSize - 1] of Byte;
     srbControl: TSrbIoControl absolute Buffer; procedure ChangeByteOrder(var Data; Size: Integer);
     var ptr: PChar;
       i: Integer;
       c: Char;
     begin
       ptr := @Data;
       for i := 0 to (Size shr 1) - 1 do
       begin
         c := ptr^;
         ptr^ := (ptr + 1)^;
         (ptr + 1)^ := c;
         Inc(ptr, 2);
       end;
     end;begin
     Result := False;
     FillChar(Buffer, BufferSize, #0);
     if Win32Platform = VER_PLATFORM_WIN32_NT then
     begin // Windows NT, Windows 2000
    // Get SCSI port handle
       hDevice := CreateFile('\\.\Scsi0:',
         GENERIC_READ or GENERIC_WRITE,
         FILE_SHARE_READ or FILE_SHARE_WRITE,
         nil, OPEN_EXISTING, 0, 0);
       if hDevice = INVALID_HANDLE_VALUE then Exit;
       try
         srbControl.HeaderLength := sizeof(SRB_IO_CONTROL);
         System.Move('SCSIDISK', srbControl.Signature, 8);
         srbControl.Timeout := 2;
         srbControl.Length := DataSize;
         srbControl.ControlCode := IOCTL_SCSI_MINIPORT_IDENTIFY;
         pInData := PSendCmdInParams(PChar(@Buffer)
           + sizeof(SRB_IO_CONTROL));
         pOutData := pInData;
         with pInData^ do
         begin
           cBufferSize := IDENTIFY_BUFFER_SIZE;
           bDriveNumber := 0;
           with irDriveRegs do
           begin
             bFeaturesReg := 0;
             bSectorCountReg := 1;
             bSectorNumberReg := 1;
             bCylLowReg := 0;
             bCylHighReg := 0;
             bDriveHeadReg := $A0;
             bCommandReg := IDE_ID_FUNCTION;
           end;
         end;
         if not DeviceIoControl(hDevice, IOCTL_SCSI_MINIPORT,
           @Buffer, BufferSize, @Buffer, BufferSize,
           cbBytesReturned, nil) then Exit;
       finally
         CloseHandle(hDevice);
       end;
     end
     else
     begin // Windows 95 OSR2, Windows 98
       hDevice := CreateFile('\\.\SMARTVSD', 0, 0, nil,
         CREATE_NEW, 0, 0);
       if hDevice = INVALID_HANDLE_VALUE then Exit;
       try
         pInData := PSendCmdInParams(@Buffer);
         pOutData := @pInData^.bBuffer;
         with pInData^ do
         begin
           cBufferSize := IDENTIFY_BUFFER_SIZE;
           bDriveNumber := 0;
           with irDriveRegs do
           begin
             bFeaturesReg := 0;
             bSectorCountReg := 1;
             bSectorNumberReg := 1;
             bCylLowReg := 0;
             bCylHighReg := 0;
             bDriveHeadReg := $A0;
             bCommandReg := IDE_ID_FUNCTION;
           end;
         end;
         if not DeviceIoControl(hDevice, DFP_RECEIVE_DRIVE_DATA,
           pInData, sizeof(TSendCmdInParams) - 1, pOutData,
           W9xBufferSize, cbBytesReturned, nil) then Exit;
       finally
         CloseHandle(hDevice);
       end;
     end;
     with PIdSector(PChar(pOutData) + 16)^ do
     begin
       ChangeByteOrder(sSerialNumber, sizeof(sSerialNumber));
       SetString(SerialNumber, sSerialNumber, sizeof(sSerialNumber)); //硬盘生产序号   ChangeByteOrder(sModelNumber, sizeof(sModelNumber));
       SetString(ModelNumber, sModelNumber, sizeof(sModelNumber)); //硬盘型号   ChangeByteOrder(sFirmwareRev, sizeof(sFirmwareRev));
       SetString(FirmwareRev, sFirmwareRev, sizeof(sFirmwareRev)); //硬盘硬件版本
       Result := True;
       ChangeByteOrder(ulTotalAddressableSectors, sizeof(ulTotalAddressableSectors));
       TotalAddressableSectors := ulTotalAddressableSectors; //硬盘ulTotalAddressableSectors参数   ChangeByteOrder(ulCurrentSectorCapacity, sizeof(ulCurrentSectorCapacity));
       SectorCapacity := ulCurrentSectorCapacity; //硬盘wBytesPerSector参数   ChangeByteOrder(wNumCurrentSectorsPerTrack, sizeof(wNumCurrentSectorsPerTrack));
       SectorsPerTrack := wNumCurrentSectorsPerTrack; //硬盘wSectorsPerTrack参数
     end;
    end;
    //===============================================================================
      

  54.   

    共同发展,谢了先!
    [email protected]
      

  55.   

    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    谢谢了。
     [email protected]
      

  56.   

    学习学习。[email protected]
    谢谢啦!
      

  57.   

    CPU序列号有问题,我的机子是intel p42.4的
      

  58.   

    也给我一份吧,[email protected]
      

  59.   

    通过!!
    麻烦把源码发一份给我吧,万分感谢。[email protected]
      

  60.   

    也给我发一份吧谢谢
    [email protected]
      

  61.   

    我也想要一份谢了。[email protected]
      

  62.   

    兄弟,也给我来一份。我想做个注册的正好用得着。多谢![email protected]
      

  63.   

    程序写的不错,我也很想要一份,非常有用。多谢。
    [email protected]
      

  64.   

    谢谢啊,我也要一份
    [email protected]
      

  65.   

    您的程序写得不错,我也要一份,先谢谢了!!!!!
    [email protected]