Ĺadny brzuch
<b>Pytania dotyczą programowania w Delphi.</b>
Pyt.1: Jak odczytać listę napędów SCSI i IDE z systemu z przypożądkowanymi literami (ja to robie tak ale gdzieś mam błąd):
Odczyt jest na podstawie rejestru i odrazu wynik jest ładowany do ListView. Myśle, że błąd jest w konwertacji odczytanego stringu z wartości binarnej (z rejestru).
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:= 'G' to 'H' 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('SYSTEMMountedDevices', 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('SYSTEMCurrentControlSetEnum'+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; Rejestr.Free; end; end; end;
Pyt.2: Jak sprawdzić czy tacka napędu jest aktualnie wysunięta, czy zamknięta (prosiłbym o styl jakiegoś komunikatu systemowego np.: WM_COĄTAM)?
Pyt.3: Jak sprawdzić jaką etykiete ma dysk CD/DVD włożony do napędu X
Pyt.4: Komponent TCoolTrayIcon ma blokować przeładowania EXPLORERA, a coś nawala? Może mam starą wersję (prosze o adres aktualnej strony tego projektu).
Z góry dziękuje!
Pozdro MasterLuk!
ps.: zaznaczam jeszcze że nikt w okresie ostatniego roku nie był mi wstanie pomóc odpowiedzieć na te pytania, przeleiałem wszystkie archiwa Microsoftu itd... ale nie znalazłem odpowiedzi...
ad 3.var volumename, systemname:pchar; serial, t:cardinal; begin getmem(volumename,256); getmem(systemname,256); GetVolumeInformation('x:',volumename,256,@serial,t,t,systemname,256); end;volumename - etykieta dysku
serial - numer seryjny
systemname - system plików
--------------------
-=[ Delphi rUlzZz ]=-
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Pyt.1: Jak odczytać listę napędów SCSI i IDE z systemu z przypożądkowanymi literami (ja to robie tak ale gdzieś mam błąd):
Odczyt jest na podstawie rejestru i odrazu wynik jest ładowany do ListView. Myśle, że błąd jest w konwertacji odczytanego stringu z wartości binarnej (z rejestru).
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:= 'G' to 'H' 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('SYSTEMMountedDevices', 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('SYSTEMCurrentControlSetEnum'+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; Rejestr.Free; end; end; end;
Pyt.2: Jak sprawdzić czy tacka napędu jest aktualnie wysunięta, czy zamknięta (prosiłbym o styl jakiegoś komunikatu systemowego np.: WM_COĄTAM)?
Pyt.3: Jak sprawdzić jaką etykiete ma dysk CD/DVD włożony do napędu X
Pyt.4: Komponent TCoolTrayIcon ma blokować przeładowania EXPLORERA, a coś nawala? Może mam starą wersję (prosze o adres aktualnej strony tego projektu).
Z góry dziękuje!
Pozdro MasterLuk!
ps.: zaznaczam jeszcze że nikt w okresie ostatniego roku nie był mi wstanie pomóc odpowiedzieć na te pytania, przeleiałem wszystkie archiwa Microsoftu itd... ale nie znalazłem odpowiedzi...
ad 3.var volumename, systemname:pchar; serial, t:cardinal; begin getmem(volumename,256); getmem(systemname,256); GetVolumeInformation('x:',volumename,256,@serial,t,t,systemname,256); end;volumename - etykieta dysku
serial - numer seryjny
systemname - system plików
--------------------
-=[ Delphi rUlzZz ]=-