Système d'importations
Importations System.Threading
Importations System.Runtime.InteropServices
Importations Microsoft.Win32
Classe publique RegistryNotification
'egl1044
'Constructeur
Nouveaux secondaires publics ()
Sous-marin d'extrémité
_
Enum public RegNotifyFilter
REG_NOTIFY_CHANGE_NAME = 1 'informent le visiteur si un subkey est ajouté ou supprimé.
REG_NOTIFY_CHANGE_LAST_SET = 4 'informent le visiteur des changements à une valeur de la clef. Ceci peut inclure ajouter ou supprimer une valeur ou changer une valeur existante.
Extrémité Enum
Enum public RegType
HKEY_LOCAL_MACHINE = &H80000002
HKEY_CLASSES_ROOT = &H80000000
HKEY_CURRENT_USER = &H80000001
HKEY_USERS = &H80000003
Extrémité Enum
'Non mis en application dans cet exemple.
' _
'Structure privée REG_NOTIFY_INFORMATION
' Faible NextEntryOffset comme nombre entier
' Faible action comme nombre entier
' Faible RegNameLength comme nombre entier
' Faible RegName comme IntPtr
'Structure d'extrémité
_
Fonction partagée privée CeFindCloseRegChange (hChangeHandle de ByVal comme IntPtr) comme nombre entier
Fonction de fin
_
Fonction partagée privée CeFindFirstRegChange (hKey de ByVal comme bWatchSubtree d'IntPtr, de ByVal comme dwNotifyFilter de nombre entier, de ByVal comme RegNotifyFilter) comme IntPtr
Fonction de fin
_
Fonction partagée privée CeFindNextRegChange (hChangeHandle de ByVal comme IntPtr) comme nombre entier
Fonction de fin
_
Fonction partagée privée RegOpenKeyEx (hKey de ByVal comme lpSubKey de RegType, de ByVal comme la corde, ulOptions de ByVal comme nombre entier, ByVal samDesired comme nombre entier, phkResult de ByRef comme IntPtr) comme nombre entier
Fonction de fin
_
Fonction partagée privée RegCloseKey (hKey de ByVal comme IntPtr) comme nombre entier
Fonction de fin
_
Fonction partagée privée WaitForSingleObject (poignée de ByVal comme Mme d'IntPtr, de ByVal comme nombre entier) comme nombre entier
Fonction de fin
hKey privé comme IntPtr = IntPtr.Zero '/poignée d'enregistrement
hChangeHandle privé comme IntPtr = IntPtr.Zero '/poignée avis d'enregistrement
NotifyThread privé en tant que fil = rien
bCancel privé comme booléen = faux
StartRegistryWatcher secondaire public ()
'Montre pour des avis dans un fil séparé.
bCancel = faux
NotifyThread = nouveau fil (AddressOf RegistryNotificationThread)
NotifyThread.IsBackground = rectifient
NotifyThread.Start ()
Sous-marin d'extrémité
StopRegistryWatcher secondaire public ()
'Décommander les avis dans le fil séparé.
le bCancel = rectifient
CeFindCloseRegChange (hChangeHandle)
Sous-marin d'extrémité
' <>
RegistryNotificationThread secondaire privé ()
'Courir les avis de changement dans le nouveau fil.
RegisterRegistryChange (RegType.HKEY_LOCAL_MACHINE, « logiciel \ fabrikan », 0)
Sous-marin d'extrémité
RegisterRegistryChange secondaire privé (rootKey de ByVal comme keyName de RegType, de ByVal comme watchSubTree de corde, de ByVal comme nombre entier)
'Détecte des avis d'enregistrement.
Si RegOpenKeyEx (rootKey, keyName, 0, 0, hKey) <> 0 puis
MsgBox (« RegOpenKeyEx failed.")
Retour
Finir si
'TODO : /arrangements filtre de changement ici
hChangeHandle = CeFindFirstRegChange (hKey, watchSubTree, RegNotifyFilter.REG_NOTIFY_CHANGE_LAST_SET)
Si hChangeHandle.ToInt32 = -1 puis
MsgBox (« CeFindFirstRegChange a échoué »)
RegCloseKey (hKey)
Retour
Finir si
Faire tandis que bCancel <> vrai
WaitForSingleObject (hChangeHandle, Timeout.Infinite)
MsgBox (« changement détecté ! ")
CeFindNextRegChange (hChangeHandle)
Thread.Sleep (0)
Boucle
'TODO : /
CeFindCloseRegChange (hChangeHandle)
RegCloseKey (hKey)
Sous-marin d'extrémité
DebugCreateRegistryEntry secondaire public ()
'Crée la clef spécifique dans l'enregistrement pour l'élimination des imperfections.
Faible rk comme RegistryKey = Registry.LocalMachine.OpenSubKey (« logiciel », vrais)
rk.CreateSubKey (« fabrikan »)
rk. Se fermer ()
Finir le sous-marin
DebugChangeRegistryValue secondaire public ()
'Simuler un changement de l'enregistrement pour l'élimination des imperfections.
Obscurcir le rk comme RegistryKey = Registry.LocalMachine.OpenSubKey (« logiciel \ fabrikan », vrais)
rk.SetValue (« fabrikans », TimeOfDay.Second.ToString, RegistryValueKind.String)
rk. Se fermer ()
Finir le sous-marin
Finir la classe
|