Ahhoz, hogy mindezt meg tudjuk tenni, el kell kapnunk a WM_DEVICECHANGE Windows üzenetet, mely akkor generálódik, mikor egy eszközt ily módon csatlakoztatunk, vagy leválasztunk. Ez az üzenet a következő konstans értékek valamelyikét tartalmazza az egyes események bekövetkeztekor.
const DBT_DEVICEARRIVAL = $8000;
A fenti érték egy eszköz sikeres csatlakoztatásakor jön létre.
DBT_DEVICEQUERYREMOVE = $800 ;
Az eszköz eltávolítására a rendszertől engedélyt kell kérni. Ez az érték ebben az esetben generálódik.
DBT_DEVICEQUERYREMOVEFAILED = $8002;
Amennyiben a rendszer elutasítja az eszköz eltávolítására vonatkozó kérelmet, a fenti értékkel tér vissza a Message.
DBT_DEVICEREMOVEPENDING = $8003;
Amennyiben a rendszer elfogadja a kérelmet, az eszköz készen áll az eltávolításra.
DBT_DEVICEREMOVECOMPLETE = $8004;
Amennyiben az eszköz eltávolítása sikeresen befejeződött, a Windows a fenti értékkel tér vissza.
DBT_DEVICETYPESPECIFIC = $8005;
Ezen érték esetén egy eszközfüggő esemény történt.
DBT_CONFIGCHANGED = $008;
Csatlakoztatáskor illetve leválasztáskor az aktuális konfiguráció megváltozik. A fenti érték ezt jelzi.
Készítsünk egy olyan eljárást, mely egy TMessage osztályból származtatott Message nevű változóban fogadja a WM_DEVICECHANGE rendszerüzenet paraméterét, majd megvizsgálja azt.
procedure TForm1.WMDeviceChange(var Message: TMessage);
var s : string;
begin
A Message változó wParam paraméterében kapott konstansok értékét megvizsgáljuk, majd annak megfelelő üzenetet íratunk ki.
case Message.wParam of
DBT_DEVICEARRIVAL: s:='A rendszerhez egy eszköz lett csatlakoztatva, mely készen áll a használatra.';
DBT_DEVICEQUERYREMOVE:
begin
s:='Az eszköz eltávolítására engedély lett kérve.';
Label2.Caption:=s;
Message.Result:=integer(true);
exit;
end;
DBT_DEVICEQUERYREMOVEFAILED: s:='Az eszköz eltávolítására kért engedély el lett utasítva.';
DBT_DEVICEREMOVEPENDING: s:='Az eszköz készen áll az eltávolításra.';
DBT_DEVICEREMOVECOMPLETE: s:='Az eszköz el lett távolítva a rendszerből.';
DBT_DEVICETYPESPECIFIC: s:='Eszközfüggő esemény.';
DBT_CONFIGCHANGED: s:='A aktuális konfiguráció meg lett változtatva.'
else s:='Ismeretlen eszköz üzenet.';
end;
Label2.Caption:=s;
inherited;
end;
A program működését bármely USB-s eszközünk segítségével kipróbálhatjuk. Olyan eszközök esetén, melyek eltávolíthatók a rendszerből, mint például egy digitális fényképezőgép vagy egy hordozható háttértár, a Tray-en meg kell jelenni egy zöld nyíl ikonnak, mely jelzi, hogy új eszköz került a konfigurációba.
Amennyiben jobb gombbal kattintunk rá, lehetőség nyílik az eszköz eltávolítására is. Ha valaki CD emulátor szoftvert használ a számítógépén, a programot azzal is kipróbálhatja.