ďťż

Ł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
  •