
A mellékelt példaprogram megnyitása előtt a TaskIcon.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component – Install Component menüpontot.
A példaprogramunk a háttérben futva figyeli a rendszer leállításakor a rendszer által küldött WM_ENDSESSION üzenetet. Amikor ezt – mint minden alkalmazás – megkapja, akkor végigpásztázza a meghajtókat, és a CD-meghajtó foglaltsága – olvasásra kész állapota – esetén megnyitja a tálcát.
Az alkalmazás indulásakor megjelenítünk egy ikont a Tálcán. Ehhez a Shell_NotifyIcon metódust használjuk.
FAdded:=Shell_NotifyIcon(NIM_ADD, @FIconData);
A TTaskIcon komponens legfontosabb tulajdonsága, hogy felüldefiniáltuk a WndProc metódust, melyben figyelhetjük a különböző forrásból érkező üzeneteket. Annak érdekében, hogy a rendszerleállásról értesüljünk, el kell kapnunk a WM_ENDSESSION üzenetet.
if Msg = WM_ENDSESSION then begin
begin
Az üzenet elkapásakor már csak a meghajtó-lista végigpásztázása van hátra. Ehhez példányosítjuk a Scripting COM komponens néhány osztályát, elsőként a FileSystemObject osztályt.
fso:=CreateOleObject('Scripting.FileSystemObject');
Az objektum segítségével egy ciklusban lekérdezhetjük az összes meghajtó típusát, és állapotát. Amennyiben az éppen vizsgált meghajtó CD-meghajtó, és olvasásra kész – vagyis van lemez a meghajtóban –, akkor kinyitjuk a meghajtó tálcáját és jelezzük, hogy a lemez bent maradt.
for d:='A' to 'Z' do begin
if fso.DriveExists(d) then begin
drive:=fso.GetDrive(d);
if (drive.DriveType = 4) and (drive.IsReady) then begin
mcisendstring('Set cdaudio door open wait',nil,0,FHandle);
exit;
end;
end;
end;
A FileSystemObject objektum DriveExists metódusával kérdezzük le, hogy az adott betűjelhez tartozik-e meghajtó. Amennyiben igen, akkor a GetDrive függvénnyel kaphatjuk meg a betűjelhez tartozó meghajtó-objektumot.
A meghajtó tálcájának megnyitására a Winmm.dll állományban található mciSendString metódust használjuk. A metódus első paraméterének kell egy speciális karakterláncot átadni a művelet végrehajtásának érdekében.
Az alkalmazás leállításához a Tálcán megjelenő ikonra kell kattintanunk az egér jobb gombjával, melynek eredményeképpen egy menüpont jelenik meg. A menüpont megnyomásával leállítható az alkalmazás.
procedure TForm1.menu1Click(Sender: TObject);
begin
Close;
end;