Programowanie w języku Delphi » FAQ

4 komentarze

rura52 2009-12-07 18:01

var
  VolumeSerialNumber : DWORD;
  MaximumComponentLength : DWORD;
  FileSystemFlags : DWORD;
  SerialNumber : string;
  Drive : PChar;
begin
    Drive := Pchar('c:\');
    GetVolumeInformation(
        Drive,
        nil,
        0,
        @VolumeSerialNumber,
        MaximumComponentLength,
        FileSystemFlags,
        nil,
        0) ;
   SerialNumber :=
         IntToHex(HiWord(VolumeSerialNumber), 4) +
         ' - ' +
         IntToHex(LoWord(VolumeSerialNumber), 4) ;

100% działa, służę pomocą!

Piro 2003-10-30 23:59

W tej formie to nie działa!
Ale koncepcja dobra.
U mnie w D6 chodzi coś takiego:

var
   Etykieta:array[0..MAX_PATH] of Char;
   SystPlik:array[0..MAX_PATH] of Char;
   MaxCompLength, FileSystemFlags : dword;
   Drive:Char;
   Serial:DWORD;
begin
   Drive:='c';
   GetVolumeInformation(PChar(Drive + ':'),Etykieta,SizeOf(Etykieta),
@Serial,MaxCompLength,FileSystemFlags,SystPlik,SizeOf(SystPlik));
end;

I wyjaśniam:
   zmienne:
      Etykieta - zawiera etykietę dysku/dysku logicznego (a nie partycji jak gdzieś przeczytałem) - gdy brak dyskietki/płyty w napędzie = krzaczki
      SysPlik - zawiera nazwę systemu plików dysku (FAT32, CDFS itp) - gdy brak dyskietki/płyty w napędzie = pusty
      Serial - zawiera numer seryjny - gdy brak dyskietki/płyty w napędzie = 0

Kilka ciekawych informacji niesie ze sobą FileSystemFlags - m.in. czy dysk jest skompresowany, czy nazwy plików rozróżniają duże/małe znaki itp. Niestety nie udało mi się tego sensownie ugryźć.

A powyższa wskazówka nie działa zapewne dlatego, że MaxCompLength i FileSystemFlags nie mogą być typu Integer (komunikat błędu - typ formalny i aktualny muszą być zgodne :))
;)

Szanmon 2003-08-04 14:50

to nie dzała!!!