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