我用DEPHI调用这个函数的时候,在填写好参数后,编译经常说变量类型不对,
如需要PCHAR,PWORD等类型,我用的时候需要转换成DEPHI认识的类型,
我没怎么用过VC的。  函数原形如下,
BOOL GetVolumeInformation(    LPCTSTR lpRootPathName, // address of root directory of the file system 
    LPTSTR lpVolumeNameBuffer, // address of name of the volume 
    DWORD nVolumeNameSize, // length of lpVolumeNameBuffer 
    LPDWORD lpVolumeSerialNumber, // address of volume serial number 
    LPDWORD lpMaximumComponentLength, // address of system's maximum filename length
    LPDWORD lpFileSystemFlags, // address of file system flags 
    LPTSTR lpFileSystemNameBuffer, // address of name of file system 
    DWORD nFileSystemNameSize  // length of lpFileSystemNameBuffer 
   );

解决方案 »

  1.   

    最简单的检查CD-ROM或是磁盘是否有过变化的方法是检查其volume号码。你可以简单地运用下面的函数来返回磁盘的volume系列号码GetDiskVolSerialID(′E′),函数代码如下:functionGetDiskVolSerialID(cDriveName:char):DWord;vardwTemp1,dwTemp2:DWord;beginGetVolumeInformation(PChar(cDriveName+′:\′),Nil,0,ΝResult,dwTemp2,dwTemp2,Nil,0);end;
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      Path, VolumeName: array [0..1023] of Char;
      MaximumComponentLength , FileSystemFlags: Cardinal;
    begin
      StrPCopy(Path, 'c:\');
      GetVolumeInformation(Path, VolumeName, SizeOf(VolumeName), nil, MaximumComponentLength, FileSystemFlags, nil, 0);
      ShowMessage(VolumeName);
    end;
      

  3.   

    sysu(死树) :  我试了好象读不出来,showmessage是空的,guestman(天涯浪子) :  我怎么得到这个序号啊,NResult 不认识的系统。
      

  4.   

    to 楼主,你是想得到序列号还是卷标?procedure TForm1.Button1Click(Sender: TObject);
    var
      Path, VolumeName: array [0..1023] of Char;
      VolumeSerialNumber, MaximumComponentLength , FileSystemFlags: Cardinal;
    begin
      StrPCopy(Path, 'c:\');
      GetVolumeInformation(Path, VolumeName, SizeOf(VolumeName), @VolumeSerialNumber, MaximumComponentLength, FileSystemFlags, nil, 0);
      ShowMessage(IntToStr(VolumeSerialNumber));  // 序列号
      ShowMessage(VolumeName);  // 卷标
    end;