为什么两次获取的硬盘序列号会不一样,请高手帮忙procedure TForm1.BitBtn1Click(Sender: TObject);
var
   SerialNum : LPDWord;
   a, b : dword;
   Buffer : array [0..25555] of char;
begin
   GetVolumeInformation(PChar('c:\\'), Buffer, SizeOf(Buffer), SerialNum, a, b, nil, 0);
   Edit1.Text:=IntToHex(SerialNum^,8); //结果为:8AD88B53
end;
procedure TForm1.Button1Click(Sender: TObject);
var
  VolumeSerialNumber:DWORD;//磁盘序列号
  MaximumComponentLength:DWORD;
  lpFileSystemNameBuffer:LPTSTR ;
  nFileSystemNameSize:DWORD;
  FileSystemFlags:DWORD;
begin
   GetVolumeInformation(PChar('c:\'),nil,0,@VolumeSerialNumber,MaximumComponentLength,FileSystemFlags,nil,0);
   Edit2.Text:=inttohex((VolumeSerialNumber),8);   // 结果为: 251A1101
end;

解决方案 »

  1.   

    // 读取逻辑磁盘的卷号
       GetVolumeInformation('C:\', nil, 0, @dwVolumeSerialNumber,
             dwMaximumComponentLength, dwFileSystemFlags, nil, 255);
       strValue := IntToHex(dwVolumeSerialNumber, 8);我就是这么调用的,且不要使用 'C:\\',而是应该使用 'C:\' 或 'C:' 即可。
      

  2.   

    我知道了,必须定义为值类型,再用 @去访问 VolumeSerialNumber:DWORD;//磁盘序列号 必须定义为值类型,再用 @去访问 
    SerialNum : LPDWord;//指针不可结帐算了