Delphi - Kijelentkezés, számítógép újraindításának eseménye

forráskód letöltése
Létrehozunk egy TShutDown nevű komponenst, melyet felhasználva tetszőleges alkalmazásunkban lehetőségünk nyílik arra, hogy értesüljünk arról az eseményről, hogy a felhasználó ki akar jelentkezni (LogOff), vagy újra akarja indítani a számítógépet, miközben a programunk fut.

Ekkor még arra is lehetőségünk nyílik, hogy ezt megakadályozzuk és így az újraindítás elmarad. Hasznos lehet ez akkor, ha április elseje van és kollégánkat szeretnénk megtréfálni, de akár akkor is, ha alkalmazásunk olyan tevékenységet folytat, melyet nem lehet megszakítani. Ekkor egy üzenetet küldhetünk a felhasználónak és megszakíthatjuk az újraindítás folyamatát.

Mellékelt példában azt valósítjuk meg, hogy a gép újraindításakor, kikapcsolásakor az aktuális dátumot és időt kiírjuk egy állományba. Így követhető, hogy mikor kapcsoltuk ki a gépet. A mellékelt példaprogram megnyitása előtt a ShutDown.pas-ban lévő komponenst telepítenie kell a Delphi alá.

A Windows egy WM_QUERYENDSESSION üzenetet küld minden alkalmazásnak, amikor a felhasználó ki akar jelentkezni, vagy újra akarja indítani a számítógépet, esetleg lekapcsolni azt.

Az üzenet elfogására azonban üzenetkezelő eljárásra van szükségünk, mellyel komponensünk nem rendelkezik, mivel csak a TComponent osztályból származik.

Ha valami nincs, akkor kénytelenek vagyunk létrehozni azt. Készítünk egy WndProc nevű üzenetkezelő eljárást és az AllocateHWnd függvénnyel regisztráljuk azt a komponens létrejöttekor.

Az üzenetkezelő eljárás figyeli a WM_QUERYENDSESSION eseményt. Ha ez bekövetkezik, akkor aktivizálja a komponens OnQueryEndSession eseményét.

Itt egy LogOff nevű logikai típusú paramétert kapunk, melyből meghatározhatjuk, hogy kijelentkezés, vagy kilépés történt a rendszerből.

A másik paraméter az AcceptShutDown. Ha ennek hamis értéket adunk, akkor a Windows megszakítja az újraindítási folyamatot.