Na razie postanowiłem jednak wykrywać ten dysk za pomocą nazwy, ale nawet na tym etapie coś mi się nie udaje. Robię tak:
procedure TMainForm.ComponentUSB1USBArrival(Sender: TObject);
begin
TWatek.Create;
end;
constructor TWatek.Create;
begin
inherited Create(False);
end;
procedure TWatek.Execute;
var
i : Integer;
Drive_Type : Integer;
Volume : array[0..255] of char;
MaxComponentLength, Flag : DWORD;
begin
FreeOnTerminate := True;
Sleep(1000);
for I:= Ord('B') to Ord('Z') do
begin
Drive_Type := GetDriveType(PChar(Chr(i) + ':\'));
if (Drive_Type <> 0) and (Drive_Type <> 1) then
begin
{pobierz etykietę}
GetVolumeInformation(PChar(Chr(i) + ':\'), Volume, SizeOf(Volume), nil,
MaxComponentLength, Flag, nil, 0);
if (Drive_Type = DRIVE_REMOVABLE) and
(Volume = MainForm.Edt_Nazwa.Text) then
begin
ShowMessage('TO JEST DOBRY USB ' + Volume);
{tu w przyszłości będą procedury wykonywane po podłączeniu dysku USB}
end;
end;
end;
end;
No i problem z tym jest taki, że dostaję komunikat Canvas does not allow drawing....
Najprawdopodobniej namieszałem coś z tym wątkiem i proszę o pomoc...
Małe wyjaśnienie: postanowiłęm dodać 2 wątek, gdyż kiedy blok instrukcji umieszczałem w procedurze zdarzeniowej wykonywanej po wykryciu urządzenia USB, to dysk nie był jeszcze widoczny w systemie (moja aplikacja przechwyciła komunikat o jego podłączeniu). Da to się chyba zrobić prościej, np. przekazując dalej ten komunikat, ale tak się zakręciłęm że już nie wiam jak to zrobić....