Płyta w napędzie optycznym

0

Witam wszystkich,
potrzebuję podczas ładowania listy dysków sprawdzić, czy w (znalezionym) napędzie optycznym znajduje się jakakolwiek płyta (CD, DVD itd);

Problem nie byłby tak denerwujący gdyby nie to, że podczas szukania dysków algorytm sprawdza czy na dysku znajdują się jakieś pliki, czy jest pusty; Właśnie podczas tej czynności gdy w napędzie optycznym nie znajduje się żaden nośnik system wyświetla okienko z prośbą o wpierdzielenie do niego płyty i czeka na reakcję nie pokazując mojego okienka dialogowego:

ErrorFrm.png

Znalazłem wiele kodów do sprawdzania jaka płyta jest w napędzie i do odczytu różnych informacji o niej (jak rozmiar danych w niej zawartych, etykieta czy zawartość) ale żaden nie wykonuje sprawdzania istnienia płyty w danym napędzie;

Proszę o wskazówkę; Pozdrawiam;

0

Funakcja zwraca True jeżeli dysk jest dostępny. Parametr DriveLetter to litera napędu np. E

function CheckDiscInDrive(DriveLetter: Char): Boolean;
var
  ErrorMode: Word;
begin
   ErrorMode := SetErrorMode(SEM_FAILCRITICALERRORS) ; //powoduje ze blad nie bedzie wyswietlany
   try
     result:= (DiskSize(Ord(DriveLetter) - $40) <> -1);
   finally
     SetErrorMode(ErrorMode) ;
   end;
end;

Przykład użycia:

procedure TForm1.Button1Click(Sender: TObject);
begin
 if CheckDiscInDrive('I') then
   ShowMessage('Jest Dysk :)')
 else
   ShowMessage('NIE MA DYSKU!')
end;
0

No i po problemie; Dziękuję za pomoc; Pozdrawiam;

EDIT: Mam jeszcze jedno pytanie, mianowicie pobieranie listy dysków realizowane jest w konstruktorze komponentu, który służy do graficznego przedstawienia listy folderów (własna wersja drzewa folderów - jak standardowy TShellTreeView); W nim mam zawartą pętlę, która pobiera mi listę dysków; Jeżeli dysk o danej literze istnieje, algorytm sprawdza, czy w danym dysku zawarte są jakieś pliki; Niestety nie mogę zrozumieć dlaczego wtedy, gdy tworzyłem komponent okno błędu nie pokazywało się, a teraz (jakieś dwa tygodnie później) okno pokazało się po raz pierwszy, a dziś znowu się nie pokazuje;

Za każdym razem napęd był pusty, a mimo to okno pokazywało się nieregularnie - raz było, raz nie; Dodam jeszcze, że systemu nie wyłączam, tylko hibernuję; Oczywiście raz na jakiś czas (co tydzień, dwa) system zamykam żeby ustawienia się zapisały; Może to ma coś do rzeczy, ale nie jestem pewien; Wczoraj pokazało mi się pierwszy raz, ale przed tym instalowałem oprogramowanie do myszki i tak naprawdę pierwszy raz użyłem napędu; Ostatnio używałem go zanim w ogóle zacząłem pisać ten komponent;

Czy wie ktoś dlaczego wcześniej okno się nie pokazywało mimo tego, że nie zmieniłem kodukonstruktora klasy? Jeżeli potrzeba, wkleję kod konstruktora, choć nie sądzę, żeby miał jakieś znaczenie;

W pętli sprawdzany jest tylko typ dysku funkcją GetDriveType i jeżeli dysk istnieje to funkcją FindFirst sprawdzam, czy istnieje w nim jakiś plik / katalog; Reszta to już wpisanie odpowiednich informacji do komponentu;

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