Sistema das importações
Importações System.Threading
Importações System.Runtime.InteropServices
Importações Microsoft.Win32
Classe pública RegistryNotification
'egl1044
'Construtor
Novos secundários públicos ()
Submarino da extremidade
_
Enum público RegNotifyFilter
REG_NOTIFY_CHANGE_NAME = 1 'notificam o chamador se um subkey é adicionado ou suprimido.
REG_NOTIFY_CHANGE_LAST_SET = 4 'notificam o chamador das mudanças a um valor da chave. Isto pode incluir a adição ou a supressão de um valor ou a mudança de um valor existente.
Extremidade Enum
Enum público RegType
HKEY_LOCAL_MACHINE = &H80000002
HKEY_CLASSES_ROOT = &H80000000
HKEY_CURRENT_USER = &H80000001
HKEY_USERS = &H80000003
Extremidade Enum
'Não executado neste exemplo.
' _
'Estrutura confidencial REG_NOTIFY_INFORMATION
' NextEntryOffset não ofuscante como o inteiro
' Ação não ofuscante como o inteiro
' RegNameLength não ofuscante como o inteiro
' RegName não ofuscante como IntPtr
'Estrutura da extremidade
_
Função compartilhada confidencial CeFindCloseRegChange (hChangeHandle de ByVal como IntPtr) como o inteiro
Função do fim
_
Função compartilhada confidencial CeFindFirstRegChange (hKey de ByVal como o bWatchSubtree de IntPtr, de ByVal como o dwNotifyFilter do inteiro, do ByVal como RegNotifyFilter) como IntPtr
Função do fim
_
Função compartilhada confidencial CeFindNextRegChange (hChangeHandle de ByVal como IntPtr) como o inteiro
Função do fim
_
Função compartilhada confidencial RegOpenKeyEx (hKey de ByVal como o lpSubKey de RegType, de ByVal como a corda, ulOptions como o inteiro, ByVal de ByVal samDesired como o inteiro, o phkResult de ByRef como IntPtr) como o inteiro
Função do fim
_
Função compartilhada confidencial RegCloseKey (hKey de ByVal como IntPtr) como o inteiro
Função do fim
_
Função compartilhada confidencial WaitForSingleObject (punho de ByVal como a Senhora de IntPtr, de ByVal como o inteiro) como o inteiro
Função do fim
hKey confidencial como IntPtr = IntPtr.Zero '/punho do registro
hChangeHandle confidencial como IntPtr = IntPtr.Zero '/punho notificação do registro
NotifyThread confidencial como a linha = nada
bCancel confidencial como bôoleano = falso
StartRegistryWatcher secundário público ()
'Relógio para notificações em uma linha separada.
bCancel = falso
NotifyThread = linha nova (AddressOf RegistryNotificationThread)
NotifyThread.IsBackground = retificam
NotifyThread.Start ()
Submarino da extremidade
StopRegistryWatcher secundário público ()
'Cancelar notificações na linha separada.
o bCancel = retifica
CeFindCloseRegChange (hChangeHandle)
Submarino da extremidade
' <>
RegistryNotificationThread secundário confidencial ()
'Funcionar notificações da mudança na linha nova.
RegisterRegistryChange (RegType.HKEY_LOCAL_MACHINE, “software \ fabrikan”, 0)
Submarino da extremidade
RegisterRegistryChange secundário confidencial (rootKey de ByVal como o keyName de RegType, de ByVal como o watchSubTree da corda, do ByVal como o inteiro)
'Deteta notificações do registro.
Se RegOpenKeyEx (rootKey, keyName, 0, 0, hKey) <> 0 então
MsgBox (“RegOpenKeyEx failed.")
Retorno
Terminar se
'TODO: /ajustes filtro da mudança aqui
hChangeHandle = CeFindFirstRegChange (hKey, watchSubTree, RegNotifyFilter.REG_NOTIFY_CHANGE_LAST_SET)
Se hChangeHandle.ToInt32 = -1 então
MsgBox (“CeFindFirstRegChange falhou”)
RegCloseKey (hKey)
Retorno
Terminar se
Fazer quando bCancel <> verdadeiro
WaitForSingleObject (hChangeHandle, Timeout.Infinite)
MsgBox (“mudança detetada! ")
CeFindNextRegChange (hChangeHandle)
Thread.Sleep (0)
Laço
'TODO: /
CeFindCloseRegChange (hChangeHandle)
RegCloseKey (hKey)
Submarino da extremidade
DebugCreateRegistryEntry secundário público ()
'Cria a chave especific no registro para a eliminação de erros.
Rk não ofuscante como RegistryKey = Registry.LocalMachine.OpenSubKey (“software”, verdadeiros)
rk.CreateSubKey (“fabrikan”)
rk. Fechar ()
Terminar o submarino
DebugChangeRegistryValue secundário público ()
'Simular uma mudança no registro para a eliminação de erros.
Escurecer o rk como RegistryKey = Registry.LocalMachine.OpenSubKey (“software \ fabrikan”, verdadeiros)
rk.SetValue (“fabrikans”, TimeOfDay.Second.ToString, RegistryValueKind.String)
rk. Fechar ()
Terminar o submarino
Terminar a classe
|