Delphi - Számítógép újraindítása, kikapcsolása, kijelentkezés a rendszerből

forráskód letöltése
Múlt héten készítettünk egy komponenst a "Kijelentkezés, számítógép újraindításának eseménye" című cikkben. Ennek segítségével figyelni tudtuk, ha a felhasználó újra akarta indítani a számítógépet, vagy csak ki akart jelentkezni. Erről egy eseményen keresztül kaptunk értesítést a komponenstől.

Mostani példánkban ezt a komponenst fejlesztjük tovább oly módon, hogy lehetőség legyen most már arra is, hogy komponens segítségével újraindíthassuk a számítógépet, vagy kijelentkezhessünk, de akár arra is, hogy kikapcsoltassuk programból a gépet. A mellékelt példaprogram megnyitása előtt a TShutDownWinX.pas-ban lévő komponenst telepítenie kell a Delphi alá. Mivel ez a komponens a TShutDown komponensből származik, így ennek a forráskódjára is szükség lesz a telepítéshez. A ShutDown.pas megtalálható az imént említett múlt heti cikk példaprogramjában.

A komponenshez létrehozunk egy ShutDown nevű eljárást. Ezt meghívva végezhetjük el az alábbi műveletek egyikét, mely a ShutDownType property-ben választott értéktől függ, mely az alábbiak egyike lehet:
  • sdtLogOff: kijelentkezés
  • sdtPowerOff: számítógép kikapcsolása (ATX ház esetén)
  • sdtReboot: számítógép újraindítása
  • sdtShutDown: számítógép leállítása
Létrehoztunk még két property-t, mellyel további beállítási lehetőségeink vannak.
Az egyik a Force nevű logikai típusú. Ha ezt igazra állítjuk és úgy hívjuk a komponens ShutDown eljárását, akkor a Windows nem fogja a WM_QUERYENDSESSION üzenetet elküldeni a többi alkalmazásnak, így azoknak nem lesz beleszólási joga, hogy például egy újraindítás megtörténhet-e vagy sem, hanem az mindenképpen megtörténik. Ekkor viszont olyan eset is előfordulhat, hogy egy-egy alkalmazásban a nem mentett értékek elvesznek.

A másik property a ForceIfHung. Használatának csak Win2000, illetve ennél újabb verzió esetén van értelme, mivel régebbi verziókban még egy megvalósított funkciót szabályoz. Ez a funkció nagyjából megegyezik az előzővel, azzal az eltéréssel, hogy ha egy alkalmazás nem válaszol, pl.: lefagyott, vagy felhasználói beavatkozásra vár, akkor ezeket figyelmen kívül hagyva megtörténik a kért művelet (újraindítás, kikapcsolást, stb.). Ilyen esetben csak a Force igazra állításakor leállna ez a művelet.