Jak odczytać numer seryjny CD?

0

Jak odczytać numer seryjny płyty CD?

Jaką odczytać numer seryjny płyty taki jak na płycie (np. 1111 11A E 11111).
Chodzi mi o takie coś jak to robią programy do nagrywania Nero i WinOnCD itp.

Robię tak:
var
Bufor:array[0..MAX_PATH] of Char;
MaxCompLength, FileSystemFlags : DWORD;
Drive:Char;
Serial:DWORD;
begin
Drive:='H'; // litera nagrywarki w której jest czysty nośnik
GetVolumeInformation(PChar(Drive + ':'),Bufor,SizeOf(Bufor),
@serial,MaxCompLength,FileSystemFlags,nil,0);

I z Serial otrzymuję liczby nie odpowiadające numerowi wybitemu na płycie tylko numerowi dysku.

0

Oj, coś mi się wydaje, że bez obsługi sterowników ASPI się nie obejdzie...

0

Szukałem w kodach Assamblera i C ale nie znalazłem może ktoś ma jakiś kod w Assamblerze lub jakiegoś linka do tego tematu to niech wrzuci.
Z góry wielkie dzięki.

0

tu jest kod dla audioCD (nie wiem cz dziala, bo nigdy go nie potrzebowalem):

procedure TForm1.GetID;
var
InfoParm : TMCI_Info_Parms;
lpInfoString : PChar;
Number: String;
const
lenInfoString = 17;
begin
{ activate MediaPlayer1 to get the DeviceID }
MediaPlayer1.DeviceType := dtCDAudio;
if not MediaPlayer1.AutoOpen then MediaPlayer1.Open;
{ prepare record: }
GetMem(lpInfoString,lenInfoString);
InfoParm.dwCallback := 0;
InfoParm.lpstrReturn := lpInfoString;
InfoParm.dwRetSize := lenInfoString;
{ get unique ID }
mciSendCommand(MediaPlayer1.DeviceID,
mci_Info,
(mci_Wait or MCI_INFO_MEDIA_IDENTITY),
Longint(@InfoParm) );
{ here comes the result: }
Number := IntToHex(StrToInt(lpInfoString),1);
FreeMem(lpInfoString,lenInfoString);
end;

0

jeden i drugi kod sa do wyswietlania jakiego identyfikatora plytki ale ktory to serial to nie mama zielonego pojecia

<font color="blue">[dopisane]</span>
znalazlem cos w stylu tego pierwszego kodu ale pokazuje cos zupelnie innego i nawet juz wiem dlaczego:D

function ID: String;
var
  VolumeSerialNumber : DWORD;
  MaximumComponentLength : DWORD;
  FileSystemFlags : DWORD;
  SerialNumber : string;
begin
//zmien literke dysku na jaka tylko chcesz ;)
  GetVolumeInformation('E:', nil, 0, @VolumeSerialNumber, MaximumComponentLength,FileSystemFlags, nil, 0);
  SerialNumber := IntToHex(HiWord(VolumeSerialNumber), 4) + '-' + IntToHex(LoWord(VolumeSerialNumber), 4);
  Result := SerialNumber;
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1