procedure TForm1.Button1Click(Sender: TObject);
var
  str1: string;
  str2: string;
  lon1: longint;
  lon2: longint;
  strt: longint;
begin
  setlength(str1,256);
  setlength(str2,256);
  windows.GetVolumeInformation('c:\',PChar(str1),256,strt,lon1,lon2,
  PChar(str2),256);
  Edit1.Text:=string(strt);
end;
我用这个API函数想得到当前硬盘的序列号,API函数的第4个参数为PDWARD(32位无符号整型指针)这个数据类型在DP里面怎么转换列?

解决方案 »

  1.   


    function Get_DiskSerialNo(DriveID : char) : string;
    var
      VolumeSerialNumber : DWORD;
      MaximumComponentLength : DWORD;
      FileSystemFlags : DWORD;
      ps:PChar;
      st:String;
      dt:DWORD;
    begin
      ps:=PChar(DriveID + ':\');
      GetVolumeInformation(ps,nil, 0, @VolumeSerialNumber,MaximumComponentLength, FileSystemFlags,nil, 0);
      DT:=GetDriveType(ps);
      st:='';
      Case dt of
        0:st:='Can not determined';
        1:st:='Disk not existsed';
        DRIVE_REMOVABLE:st:='REMOVABLED';
        DRIVE_FIXED:st:='FIXED';
        DRIVE_REMOTE:st:='REMOTE';
        DRIVE_CDROM:st:='CDROM';
        DRIVE_RAMDISK:st:='RAMDISK';
      end;
      result := IntToHex(HiWord(VolumeSerialNumber), 4) +'-' + IntToHex(LoWord(VolumeSerialNumber), 4)+'  Type:'+st;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      Edit1.Text:=Get_DiskSerialNo(DriveComboBox1.Drive);
    end;
      

  2.   

    function GetHDNumber(Drv : String): DWORD; //得到硬盘卷标号
    var
      VolumeSerialNumber : DWORD;
      MaximumComponentLength : DWORD;
      FileSystemFlags : DWORD;
    begin
      if Drv[Length(Drv)] =':' then Drv := Drv + '\';
      GetVolumeInformation(pChar(Drv),nil,0,@VolumeSerialNumber,MaximumComponentLength,FileSystemFlags,nil,0);
      Result:= (VolumeSerialNumber);
    end;procedure TMainForm.ComboBox1Change(Sender: TObject);
    var
      x:integer;
      driver:pchar;
    begin
      driver:=PChar(ComboBox1.Text);
      x := GetDriveType(driver);
      if (x<>2) and (X<>3) and (x<>4) and (x<>5) and (x<>6) then
        Edit2.Text :='你所选择的磁盘无效!'
      else
        Edit2.Text := IntToStr(GetHDNumber(ComboBox1.Text));
    end;