HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Változások figyelése egy registry kulcson belül


Példaprogram letöltése

1878 bájt

Szinte az összes program végrehajt közvetve vagy közvetlenül változtatásokat a Windows regisztrációs adatbázisában. Ha kíváncsiak vagyunk rá, hogy melyik módosítja egy adott kulcs tartalmát, segítségül hívhatjuk a WMI (Windows Management Instrumentation) szolgáltatást, mely fel van szerelve eseménykezelő objektumokkal, melyek lehetővé teszik a registry állapotának figyelését. Használatukat egy példa szkripten keresztül mutatjuk be.

Cikkünkhöz mellékeltük az alábbiakban tárgyalásra kerülő szkriptet "CheckRegEvents.vbs" néven. Futtatásával ellenőrzésünk alá vonjuk a "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\\Windows NT\\CurrentVersion" registry kulcs változásait.
Az operációs rendszer figyelemmel kísérti a regisztrációs adatbázis minden módosulását és a felhasználói felület felé - a programok, szkriptek számára - biztosít néhány függvényt a könnyebb kezelhetőség érdekében. Alapvetően az események három típusát különböztetjük meg:
  • RegistryTreeChangeEvent
A registry szerkezetének hierarchiájában történő változásokat kíséri figyelemmel.
  • RegistryKeyChangeEvent
Egy megadott kulcs változásait figyeli.
  • RegistryValueChangeEvent
Egy megadott bejegyzés változásait figyeli.
Alábbi példánkban a középső osztály használatát ismertetjük, lényegét tekintve a másik kettő is így működik:
Kapcsolatot teremtünk a WMI szolgáltatással a "winmgmts" interfészen keresztül. Ez hivatott a rendszerszintű osztályok és a felhasználói programok közötti átmentet biztosítani. A regisztrációs adatbázist kezelő osztályok és függvények a WMI root/default névterében találhatók.
Set wmiServices = GetObject("winmgmts:root/default") 
A változtatások ellenőrzését aszinkron eseményfigyeléssel lehet végrehajtani. Azért nevezzük aszinkronnak, mert a szkriptben nem kell ismétlődő ciklusokkal figyeltetni, hanem csak egyszer fut le az ellenőrző rész és az esemény bekövetkeztekor jelzés érkezik a szkripthez is. Másként fogalmazva az esemény és a szkript adott részének futása nem kell, hogy szinkronban legyen a sikeres végrehajtáshoz. Ezt hivatott szolgálni a "WbemScripting.SWbemSink" objektum.
Set wmiSink = WScript.CreateObject("WbemScripting.SWbemSink", "SINK_") 
Lekérünk minden eseményt a "RegistryKeyChangeEvent" objektumtól, ami a "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\\Windows NT\\CurrentVersion" kulccsal kapcsolatos.
wmiServices.ExecNotificationQueryAsync wmiSink, "SELECT * FROM RegistryKeyChangeEvent WHERE Hive='HKEY_LOCAL_MACHINE' AND " &  "KeyPath='SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion'" 
Megjelenítünk egy üzenetablakot ("vbCrLf" egy sortörés a szövegkiírásban).
WScript.Echo "Kilépés a regisztrációs adatbázis figyeléséből." & vbCrLf  
Ha a felhasználó rákattint az ablakban lévő "OK" gombra kilépünk és lezárjuk a szkript futtatását.
Mi történik, ha bekövetkezik az esemény? Elindul az alábbi eljárás:
Sub SINK_OnObjectReady(wmiObject, wmiAsyncContext) 
Ahol kiíratjuk az eseménnyel kapcsolatos információkat.
    WScript.Echo "Érzékelt esemény:" & vbCrLf & _
                 "------------------------------" & vbCrLf & _ 
                 wmiObject.GetObjectText_() 
End Sub

Cikksorozat

#IDKategóriaCikk címeSorozat
1621DelphiMySQL szerverek elérése Delphi-ből1. rész
1632DelphiMySQL szerverek elérése Delphi-ből2. rész
1641DelphiMySQL szerverek elérése Delphi-ből3. rész
1649DelphiMySQL szerverek elérése Delphi-ből4. rész


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