Sistema de las importaciones
Importaciones System.Threading
Importaciones System.Runtime.InteropServices
Importaciones Microsoft.Win32
Clase pública RegistryNotification
'egl1044
'Constructor
Nuevos secundarios públicos ()
Submarino del extremo
_
Enum público RegNotifyFilter
REG_NOTIFY_CHANGE_NAME = 1 'notifican a llamador si se agrega o se suprime un subkey.
REG_NOTIFY_CHANGE_LAST_SET = 4 'notifican a llamador de cambios a un valor de la llave. Esto puede incluir el adición o la supresión de un valor o el cambio de un valor existente.
Extremo Enum
Enum público RegType
HKEY_LOCAL_MACHINE = &H80000002
HKEY_CLASSES_ROOT = &H80000000
HKEY_CURRENT_USER = &H80000001
HKEY_USERS = &H80000003
Extremo Enum
'No ejecutado en este ejemplo.
' _
'Estructura privada REG_NOTIFY_INFORMATION
' NextEntryOffset dévil como número entero
' Acción dévil como número entero
' RegNameLength dévil como número entero
' RegName dévil como IntPtr
'Estructura del extremo
_
Función compartida privada CeFindCloseRegChange (hChangeHandle de ByVal como IntPtr) como número entero
Función del final
_
Función compartida privada CeFindFirstRegChange (hKey de ByVal como bWatchSubtree de IntPtr, de ByVal como dwNotifyFilter del número entero, de ByVal como RegNotifyFilter) como IntPtr
Función del final
_
Función compartida privada CeFindNextRegChange (hChangeHandle de ByVal como IntPtr) como número entero
Función del final
_
Función compartida privada RegOpenKeyEx (hKey de ByVal como el lpSubKey de RegType, de ByVal como la secuencia, ulOptions como número entero, ByVal de ByVal samDesired como número entero, phkResult de ByRef como IntPtr) como número entero
Función del final
_
Función compartida privada RegCloseKey (hKey de ByVal como IntPtr) como número entero
Función del final
_
Función compartida privada WaitForSingleObject (manija de ByVal como ms de IntPtr, de ByVal como número entero) como número entero
Función del final
hKey privado como IntPtr = IntPtr.Zero '/manija del registro
hChangeHandle privado como IntPtr = IntPtr.Zero '/manija de la notificación del registro
NotifyThread privado como hilo de rosca = nada
bCancel privado como boleano = falso
StartRegistryWatcher secundario público ()
'Reloj para las notificaciones en un hilo de rosca separado.
bCancel = falso
NotifyThread = nuevo hilo de rosca (AddressOf RegistryNotificationThread)
NotifyThread.IsBackground = verdad
NotifyThread.Start ()
Submarino del extremo
StopRegistryWatcher secundario público ()
'Cancelar las notificaciones en el hilo de rosca separado.
el bCancel = verdad
CeFindCloseRegChange (hChangeHandle)
Submarino del extremo
' <>
RegistryNotificationThread secundario privado ()
'Funcionar las notificaciones del cambio en el nuevo hilo de rosca.
RegisterRegistryChange (RegType.HKEY_LOCAL_MACHINE, “software \ fabrikan”, 0)
Submarino del extremo
RegisterRegistryChange secundario privado (rootKey de ByVal como keyName de RegType, de ByVal como watchSubTree de la secuencia, de ByVal como número entero)
'Detecta notificaciones del registro.
Si RegOpenKeyEx (rootKey, keyName, 0, 0, hKey) <> 0 entonces
MsgBox (“RegOpenKeyEx failed.")
Vuelta
Terminar si
'TODO: /ajustes del filtro del cambio aquí
hChangeHandle = CeFindFirstRegChange (hKey, watchSubTree, RegNotifyFilter.REG_NOTIFY_CHANGE_LAST_SET)
Si hChangeHandle.ToInt32 = -1 entonces
MsgBox (“CeFindFirstRegChange falló”)
RegCloseKey (hKey)
Vuelta
Terminar si
Hacer mientras que bCancel <> verdad
WaitForSingleObject (hChangeHandle, Timeout.Infinite)
¡MsgBox (“cambio detectado! ")
CeFindNextRegChange (hChangeHandle)
Thread.Sleep (0)
Lazo
'TODO: /
CeFindCloseRegChange (hChangeHandle)
RegCloseKey (hKey)
Submarino del extremo
DebugCreateRegistryEntry secundario público ()
'Crea la llave especificada en el registro para el depuración.
Rk dévil como RegistryKey = Registry.LocalMachine.OpenSubKey (“software”, verdades)
rk.CreateSubKey (“fabrikan”)
rk. Cerrarse ()
Terminar el submarino
DebugChangeRegistryValue secundario público ()
'Simular un cambio en el registro para el depuración.
Amortiguar el rk como RegistryKey = Registry.LocalMachine.OpenSubKey (“software \ fabrikan”, verdades)
rk.SetValue (“fabrikans”, TimeOfDay.Second.ToString, RegistryValueKind.String)
rk. Cerrarse ()
Terminar el submarino
Terminar la clase
|