HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Meghajtóban felejtett CD-lemez jelzése rendszerleálláskor


Példaprogram letöltése

6926 bájt

Bizonyára mindenkivel előfordult már, hogy a számítógép kikapcsolása után vette csak észre, hogy a CD-meghajtóban felejtett egy CD-lemezt, melyre szüksége lenne. Ilyenkor sajnos újra kell indítani a gépet. Cikkünkben elkészítünk egy példaalkalmazást, mely a háttérben futva figyeli a rendszerleállás eseményét, és lemez érzékelésekor a meghajtó tálcájának nyitásával jelzi ezt a felhasználónak.

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;

Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2003 évkönyv 703. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |