Import System
Import System.Threading
Import System.Runtime.InteropServices
Import Microsoft.Win32
Społeczeństwo Klasowy RegistryNotification
'egl1044
'Konstruktor
Jawny Okręt podwodny Nowy ()
Końcówka Okręt podwodny
_
Jawny Enum RegNotifyFilter
REG_NOTIFY_CHANGE_NAME = (1) 'Zawiadamiać the rozmówca jeżeli subkey dodawać lub kasować.
REG_NOTIFY_CHANGE_LAST_SET = 4 'Zawiadamiać the rozmówca zmiana wartość the klucz. Wartość móc lub wartość lub istniejący wartość.
Końcówka Enum
Jawny Enum RegType
HKEY_LOCAL_MACHINE = &H80000002
HKEY_CLASSES_ROOT = &H80000000
HKEY_CURRENT_USER = &H80000001
HKEY_USERS = &H80000003
Końcówka Enum
'Uprawomocniać w ten przykład.
' _
'Intymny Struktura REG_NOTIFY_INFORMATION
' Ciemnawy NextEntryOffset Jako Integer
' Ciemnawy Akcja Jako Integer
' Ciemnawy RegNameLength Jako Integer
' Ciemnawy RegName Jako IntPtr
'Końcówka Struktura
_
Intymny Podzielony Funkcja CeFindCloseRegChange (ByVal hChangeHandle Jako IntPtr) Jako Integer
Końcówka Funkcja
_
Intymny Podzielony Funkcja CeFindFirstRegChange (ByVal hKey Jako IntPtr, ByVal bWatchSubtree Jako Integer, ByVal dwNotifyFilter Jako RegNotifyFilter) Jako IntPtr
Końcówka Funkcja
_
Intymny Podzielony Funkcja CeFindNextRegChange (ByVal hChangeHandle Jako IntPtr) Jako Integer
Końcówka Funkcja
_
Intymny Podzielony Funkcja RegOpenKeyEx (ByVal hKey Jako RegType, ByVal lpSubKey Gdy Sznurek, ByVal ulOptions Jako Integer, ByVal samDesired Jako Integer, ByRef phkResult Jako IntPtr) Jako Integer
Końcówka Funkcja
_
Intymny Podzielony Funkcja RegCloseKey (ByVal hKey Jako IntPtr) Jako Integer
Końcówka Funkcja
_
Intymny Podzielony Funkcja WaitForSingleObject (ByVal rękojeść Jako IntPtr, ByVal ms Jako Integer) Jako Integer
Końcówka Funkcja
Intymny hKey Gdy IntPtr = IntPtr.Zero '/archiwum rękojeść
Intymny hChangeHandle Gdy IntPtr = IntPtr.Zero '/archiwum powiadomienie rękojeść
Intymny NotifyThread Jako Nić = Nic
Intymny bCancel Boolowski = Fałszywy
Jawny Okręt podwodny StartRegistryWatcher ()
'Zegarek dla powiadomienie na oddzielny nić.
bCancel = Fałszywy
NotifyThread = Nowy Nić (AddressOf RegistryNotificationThread)
NotifyThread.IsBackground = Prawdziwy
NotifyThread.Start ()
Końcówka Okręt podwodny
Jawny Okręt podwodny StopRegistryWatcher ()
'Odwoływać powiadomienie na the oddzielny nić.
bCancel = Prawdziwy
CeFindCloseRegChange (hChangeHandle)
Końcówka Okręt podwodny
' <>
Intymny Okręt podwodny RegistryNotificationThread ()
'Bieg zmiana powiadomienie na nowy nić.
RegisterRegistryChange (RegType.HKEY_LOCAL_MACHINE, "Oprogramowanie \ fabrikan", (0))
Końcówka Okręt podwodny
Intymny Okręt podwodny RegisterRegistryChange (ByVal rootKey Jako RegType, ByVal keyName Jako Sznurek, ByVal watchSubTree Jako Integer)
'Wykrywać archiwum powiadomienie.
Jeżeli RegOpenKeyEx (rootKey, keyName, (0), (0), hKey) <> (0) Wtedy
MsgBox ("RegOpenKeyEx failed.")
Powrót
Kończyć Jeżeli
'TODO: /Zmiana filtrowy położenie tutaj
hChangeHandle = CeFindFirstRegChange (hKey, watchSubTree, RegNotifyFilter.REG_NOTIFY_CHANGE_LAST_SET)
Jeżeli hChangeHandle.ToInt32 = -1 Wtedy
MsgBox ("CeFindFirstRegChange nie udać się")
RegCloseKey (hKey)
Powrót
Kończyć Jeżeli
Robić Podczas Gdy bCancel <> Prawdziwy
WaitForSingleObject (hChangeHandle, Timeout.Infinite)
MsgBox ("Zmiana Wykrywać! ")
CeFindNextRegChange (hChangeHandle)
Thread.Sleep ((0))
Pętla
'TODO: /
CeFindCloseRegChange (hChangeHandle)
RegCloseKey (hKey)
Końcówka Okręt podwodny
Jawny Okręt podwodny DebugCreateRegistryEntry ()
'Tworzyć the precyzować klucz w the archiwum dla debugging.
Ciemnawy rk Jako RegistryKey = Registry.LocalMachine.OpenSubKey ("Oprogramowanie", Prawdziwy)
rk.CreateSubKey ("fabrikan")
rk. Zamykać ()
Kończyć Okręt podwodny
Jawny Okręt podwodny DebugChangeRegistryValue ()
'Symulować zmiana w the archiwum dla debugging.
Ćmić rk Jako RegistryKey = Registry.LocalMachine.OpenSubKey ("Oprogramowanie \ fabrikan", Prawdziwy)
rk.SetValue ("fabrikans", TimeOfDay.Second.ToString, RegistryValueKind.String)
rk. Zamykać ()
Kończyć Okręt podwodny
Kończyć Klasa
|