function Tu_registry.get_Hd_serial():string;
var SerialNum : pdword; a, b : dword; Buffer : array [0..255] of char;
   //cc:string;
begin
  if GetVolumeInformation('c:\', Buffer, SizeOf(Buffer), SerialNum, a, b, nil, 0)
  then edit3.text := IntToStr(SerialNum^);
  result := edit3.text;
end;

解决方案 »

  1.   

    读取硬盘序列号。
    procedure TForm1.Button1Click(Sender: TObject);  
    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; 
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);  
    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; 
      

  3.   

    IUPRG(爱情停电,遨游苦读中):
      我用你的程序写在button按钮的单击事件中,运行后,没有反应?
      

  4.   

    var
      Temp1,Temp2,Volume:DWord;
    begin
      GetVolumeInformation(PChar('C:'),Nil,0,Addr(Volume),
                           Temp1,Temp2,Nil,0);
      //Volume就是序列号,可以用IntToStr转成字符串
    end;
      

  5.   

    各位,小弟运行的结果如下:
      lyc_program76(红叶舞秋山) 在delphi5、6中多可通过;
      其他的在delphi5中可通过!
      

  6.   

    http://www.csdn.net/Expert/TopicView1.asp?id=586709
      

  7.   

    //==============================================================================
    //获得硬盘序列号****************************************************************
    //==============================================================================
    function GetHardDiskSerial(Drive: string): string;
    var VolumeSerialNumber: DWORD;
        MaximumComponentLength: DWORD;
        FileSystemFlags: DWORD;
    begin
      if Drive[Length(Drive)]=':' then Drive := Drive + '\';
      GetVolumeInformation(PChar(Drive), nil, 0, @VolumeSerialNumber, MaximumComponentLength, FileSystemFlags, nil, 0);
      Result := IntToHex(HiWord(VolumeSerialNumber), 4) + '-' + IntToHex(LoWord(VolumeSerialNumber), 4);
    end;
      

  8.   

    GetVolumeInformation这个函数是读硬盘卷标,而卷标可以更改,建议不要用这个加密
      

  9.   

    Hard disk serial number
    Question
    Is there anyone who knows how to obtain the hard disk serial number?
    Answer
    I have an unit to get the Hd Name and the Hd Serial number for Borland
    Pascal 7.0. I don't know if it's working with Delphi and the other thing is
    that it is in dutch and I don't have time to translate it in englisch. Mayby
    you can use it, otherwise drop it out of the window.
    Unit HardDisk;
    INTERFACE
    FUNCTION  GetHardDiskNaam  : STRING;
    FUNCTION  GetHardDiskSerieNummer        : STRING;
    FUNCTION  GetHardDiskControlleNummer    : STRING;
    PROCEDURE GetHardDiskGegevens;
    CONST
      CodeerTabel : ARRAY[0..24] OF BYTE =
    (3,1,2,1,4,1,3,2,6,4,6,5,1,2,6,4,2,6,3,4,6,2,4,1,2);
    TYPE
      CharArray = ARRAY[0..24] OF CHAR;
    VAR
      HardDiskGegevens          : ARRAY[1..256] OF INTEGER;
      HardDiskNaam  : CharArray;
      SerieNummer  : CharArray;
      ControlleNummer          : CharArray;
      C_HardDiskNaam: STRING;
      C_HardDiskSerieNummer    : STRING;
      C_HardDiskControlleNummer : STRING;
      C_LicentieNaam: STRING;
    IMPLEMENTATION
    FUNCTION GetHardDiskNaam : STRING;
    VAR
      Teller : INTEGER;
      Lus    : INTEGER;
    BEGIN
        GetHardDiskNaam := '';
        Teller := 1;
        FOR Lus := 1 TO 18 DO
        BEGIN
          HardDiskNaam[Teller] := CHR( ( HardDiskGegevens[27+Lus] DIV 256 ));
          Inc(Teller);
          HardDiskNaam[Teller] := CHR( ( HardDiskGegevens[27+Lus] MOD 256 ));
          Inc(Teller);
        END;
        GetHardDiskNaam := HardDiskNaam;
    END;
    FUNCTION GetHardDiskSerieNummer : STRING;
    VAR
      Teller : INTEGER;
      Lus    : INTEGER;
    BEGIN
        GetHardDiskSerieNummer := '';
        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;
        GetHardDiskSerieNummer := SerieNummer;
    END;
    FUNCTION GetHardDiskControlleNummer : STRING;
    VAR
      Teller : INTEGER;
      Lus    : INTEGER;
    BEGIN
        GetHardDiskControlleNummer := '';
        Teller := 1;
        FOR Lus := 1 TO 3 DO
        BEGIN
          ControlleNummer[Teller] := CHR( ( HardDiskGegevens[23+Lus] DIV 256 ));
          Inc(Teller);
          ControlleNummer[Teller] := CHR( ( HardDiskGegevens[23+Lus] MOD 256 ));
          Inc(Teller);
        END;
        GetHardDiskControlleNummer := ControlleNummer;
    END;
    PROCEDURE GetHardDiskGegevens;
    VAR
      Lus    : INTEGER;
    BEGIN
      WHILE ( Port[$1f7] <> $50) DO ;
      Port[$1F6] := $A0 ;
      Port[$1F7] := $EC ;
      WHILE ( Port[$1f7] <> $58 ) DO ;
      FOR Lus := 1 TO 256 DO
      BEGIN
        HardDiskGegevens[Lus] := Portw[$1F0] ;
      END;
    END;
    END.