HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Számítógép leállítása, újraindítása vagy kijelentkezés egy általunk megadott program bezárásánál


Példaprogram letöltése

2638 bájt

Gyakran hasznos lehet, ha egy program bezárása után automatikusan kikapcsoljuk a számítógépet, esetleg kijelentkeztetjük a felhasználót, vagy újraindítjuk a gépet (pl.: alkalmazástelepítés után). Az alábbiakban közlünk egy szkriptet, mely elindít egy általunk megadott programot és ennek bezárása után, beállításaink szerint végrehajtja a fenti funkciók valamelyikét.

Mellékeltük az alábbi szkriptet "Autologoff.vbs" néven. Futtatása után elindítja a "Jegyzettömb" ("Notepad") alkalmazást, bezárása után kilépteti a felhasználót. A futtatandó programot az első sor "Program" változójában lehet módosítani, a bezárási műveletet pedig a második sor "Action" változójában az alábbiak figyelembevételével.
Akkor is hasznát vehetjük egy ilyen vagy hasonló szkriptnek, ha elindítunk egy hosszabb letöltést az Internetről és nem akarjuk megvárni a végét. Figyeltetjük, hogy mikor záródik be a letöltő alkalmazás, majd kikapcsoltatjuk a számítógépet egyben bontva a vonalat. Ugyancsak hasznos lehet egy alkalmazás feltelepítését követő újraindításnál is.
Nézzük a szkriptet és működésének magyarázatát:
Két dolgot adunk meg az elején lévő változókban: az egyik az elindítandó alkalmazás ("Program"), jelen esetben a NOTEPAD.EXE, másik a bezárás után végrehajtandó művelet: kijelentkezés (logoff), leállítás (shutdown), újraindítás (reboot), újraindítás anélkül, hogy megvárnánk a nem mentett adatok mentését (force), végül a számítógép kikapcsolása (poweroff).
Program = "notepad.exe"
Action = "Logoff"
A műveletet végrehajtó programkódot helyezzük el egy szubrutinban és definiáljuk a fenti parancsokat. Mindegyikhez tartozik egy szám mellyel a WMI (Windows Management Instrumentation) szolgáltatáson belül hivatkozhatunk rá.
Sub ShutDown(sNode, sCmd)
  Const EWX_LOGOFF = 0
  Const EWX_SHUTDOWN = 1
  Const EWX_REBOOT = 2
  Const EWX_FORCE = 4
  Const EWX_POWEROFF = 8
A \root\cimv2 névtérben lévő "Win32_OperatingSystem" osztály "Win32shutdown" metódusával lehet az operációs rendszer kilépési, leállítási műveleteit végrehajtani. Elsőként létre kell hoznunk egy kapcsolat objektumot az osztállyal, majd a kapott eredményen végrehajtani a megfelelő parancsot.
  Set WMI = GetObject("winmgmts:" & "{impersonationLevel=impersonate,(Shutdown)}!\\" & sNode & "\root\cimv2")
  Set colOperatingSystems = WMI.ExecQuery ("Select * from Win32_OperatingSystem")
  For Each obj in colOperatingSystems
    Set oOS = obj :  Exit For
  Next
Az "iCmd" változóban a fenti konstansok összegeként állítsuk elő a végrehajtandó műveletet.
  sCmd = LCase(sCmd)
  Select Case sCmd
    Case "logoff"
      iCmd = EWX_LOGOFF
    Case "logoff_force"
      iCmd = EWX_LOGOFF + EWX_FORCE
    Case "shutdown"
      iCmd = EWX_SHUTDOWN
    Case "shutdown_force"
      iCmd = EWX_SHUTDOWN + EWX_FORCE
    Case "reboot"
      iCmd = EWX_REBOOT
    Case "reboot_force"
      iCmd = EWX_REBOOT + EWX_FORCE
    Case "poweroff"
      iCmd = EWX_POWEROFF
    Case "poweroff_force"
      iCmd = EWX_POWEROFF + EWX_FORCE
    Case Else
      iCmd = EWX_POWEROFF
  End Select
Végül hívjuk meg a "Win32shutdown" metódust, paraméterként átadva a végrehajtandó műveletet.
  oOS.Win32shutdown iCmd
End Sub
Logikailag nem a fenti szubrutin jelenti a szkript elejét, hanem a most következő sorok. A "WScript.Shell" osztály "Run" metódusával lehet VBScript-ből külső programokat indítani. A "Program" változóban szereplő alkalmazást fogjuk futtatni.
Set oShell = CreateObject("WScript.Shell")
oShell.Run Program
A WMI "Win32_Process" osztálya kezeli a rendszerben futó folyamatokat. Lekérjük a "Program" adatait és ellenőrizzük, hogy hány példányban fut ("WMIResult.Count"), ha nulla, akkor a felhasználó bezárta vagy egyéb módon, de befejeződött és következhet a fenti szubrutin meghívása. Az "Action" változóban megadott feladat kerül végrehajtásra, alapértelmezésben a helyi gépen ("."). Ha a pont helyett egy másik gép nevét adjuk meg, akkor azon fog végrehajtódni a művelet. Fél másodpercenként ellenőrizzük, hogy fut-e még az alkalmazásunk (Sleep 500).
Set WMI = GetObject("winmgmts:")
Do While True
  sWmiq = "select Name from Win32_Process where name='" & Program & "'"
  Set WMIResult = WMI.Execquery(sWmiq)
  If WMIResult.Count = 0 Then
    ShutDown ".", Action
    Exit Do
  End If
  WScript.Sleep 500
Loop

Könyv
Ez a cikk megtalálható ebben a könyvben: Windows Software Offline 2002 évkönyv 563. 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 |