Jak odczytać numer seryjny dysku
Adam Boduch
Funkcja ta podaje tylko numer seryjny partycji lub dyskietki, a nie dysku.
var
Bufor : array[0..255] of Char;
MaxCompLength, FileSystemFlags : Cardinal;
Drive : Char;
Serial : DWORD;
begin
Drive := 'A';
GetVolumeInformation(PChar(Drive + ':'),Bufor, SizeOf(Bufor), @Serial, MaxCompLength, FileSystemFlags, nil, 0);
end;
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ą!
Jak odczytać numer seryjny partycji lub dyskietki
dejavu?
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 :))
;)
to nie dzała!!!