Mam taki problem: Chciałbym wydobyć z systemu litery CD/DVD (dysków optycznych) - co już umiem zrobić + przypożądkować im nazwe sprzętową (np.: D: [TEAC RW324]).

Próbowałem szperać w rejestrze (zamieszczam kawałek kodu - troche niepoukładany), wydobywa i porządkuje napędy ale tylko na moim komputerze ;-):

uses registry;
{...}
procedure TstConfigModule.Button7Click(Sender: TObject);
var
    Rejestr : TRegistry;
    Buff : array [0..4096] of Char;
    x, i: Integer;
    HardwareID: PChar;
    Dane: TStringList;
    Dysk: Char;
    DeviceNo: Integer;
    DeviceTyp: Integer;
begin
DeviceNo:=-1;
ListView5.Items.Clear;
 for Dysk:= 'A' to 'Z' do
 begin
DeviceTyp:=GetDriveType(PChar(dysk+':\'));
if DeviceTyp = DRIVE_CDROM then
begin
DeviceNo:=DeviceNo+1;
HardwareID:='';
Dane:=TStringList.Create;
  Rejestr := TRegistry.Create;
  Rejestr.Access:=KEY_READ;
  Rejestr.RootKey:=HKEY_LOCAL_MACHINE;
  Rejestr.OpenKey('SYSTEM\MountedDevices', False);
  i := Rejestr.ReadBinaryData('\DosDevices\'+UpperCase(Dysk)+':', Buff, SizeOf(Buff));
  for x := 0 to i-1 do
   begin
     HardwareID := PCHar(HardwareID + Buff[x]);
   end;

HardwareID:=PChar(Copy(HardwareID,5,Pos('{',HardwareID)-4-2));
HardwareID[Pos('#',HardwareID)-1]:='\';
HardwareID[Pos('#',HardwareID)-1]:='\';
Rejestr.CloseKey;

Dane.Clear;
Rejestr.OpenKey('SYSTEM\CurrentControlSet\Enum\'+HardwareID,False);
//Zmień liere
ListView5.Items.Add.Caption:=UpperCase(Dysk)+':';
Dane.Add(Rejestr.ReadString('FriendlyName'));
Dane.Add(Rejestr.ReadString('Class'));
Dane.Add(Rejestr.ReadString('DeviceDesc'));
Dane.Add('0');
//ListView5.Items.Item[DeviceNo].SubItems:=Dane; //Przypisanie do listy
Rejestr.Free;
end;
end;
end;

Kod jest napisany troche nieczytelnie, ale myśle że ten kto będzie wiedział o co chodzi dojdzie do sedna.
Dziękuje za pomoc i pozdrawiam!

http://www.naszastrefa.com | MasterLuk