Система ввозов
Ввозы System.Threading
Ввозы System.Runtime.InteropServices
Ввозы Microsoft.Win32
Общественный тип RegistryNotification
'egl1044
'Конструктор
Общественные Sub новые ()
Подводная лодка конца
_
Общественное Enum RegNotifyFilter
REG_NOTIFY_CHANGE_NAME = 1 'сообщают звонящий по телефону если добавлено или уничтожено subkey.
REG_NOTIFY_CHANGE_LAST_SET = 4 'сообщают звонящий по телефону изменений к значению ключа. Это может включить добавлять или уничтожать значение или изменять существующий значение.
Конец Enum
Общественное Enum RegType
HKEY_LOCAL_MACHINE = &H80000002
HKEY_CLASSES_ROOT = &H80000000
HKEY_CURRENT_USER = &H80000001
HKEY_USERS = &H80000003
Конец Enum
'Снабжено в этом примере.
' _
'Приватная структура REG_NOTIFY_INFORMATION
' Тусклое NextEntryOffset как интежер
' Тусклое действие как интежер
' Тусклое RegNameLength как интежер
' Тусклое RegName как IntPtr
'Структура конца
_
Приватная, котор делят функция CeFindCloseRegChange (hChangeHandle ByVal как IntPtr) как интежер
Функция конца
_
Приватная, котор делят функция CeFindFirstRegChange (hKey ByVal как bWatchSubtree IntPtr, ByVal как dwNotifyFilter интежера, ByVal как RegNotifyFilter) как IntPtr
Функция конца
_
Приватная, котор делят функция CeFindNextRegChange (hChangeHandle ByVal как IntPtr) как интежер
Функция конца
_
Приватная, котор делят функция RegOpenKeyEx (hKey ByVal как lpSubKey RegType, ByVal по мере того как шнур, ulOptions как интежер, ByVal ByVal samDesired как интежер, phkResult ByRef как IntPtr) как интежер
Функция конца
_
Приватная, котор делят функция RegCloseKey (hKey ByVal как IntPtr) как интежер
Функция конца
_
Приватная, котор делят функция WaitForSingleObject (ручка ByVal как госпожа IntPtr, ByVal как интежер) как интежер
Функция конца
Приватное hKey по мере того как IntPtr = IntPtr.Zero '/ручка регистратуры
Приватное hChangeHandle по мере того как IntPtr = IntPtr.Zero '/ручка извещения регистратуры
Приватное NotifyThread как резьба = ничего
Приватное bCancel как булевско = ложно
Общественное Sub StartRegistryWatcher ()
'Вахта для извещений на отдельно резьбе.
bCancel = ложно
NotifyThread = новая резьба (AddressOf RegistryNotificationThread)
NotifyThread.IsBackground = True
NotifyThread.Start ()
Подводная лодка конца
Общественное Sub StopRegistryWatcher ()
'Отмените извещения на отдельно резьбе.
bCancel = True
CeFindCloseRegChange (hChangeHandle)
Подводная лодка конца
' <>
Приватное Sub RegistryNotificationThread ()
'Побегите извещения изменения на новой резьбе.
RegisterRegistryChange (RegType.HKEY_LOCAL_MACHINE, «средство программирования \ fabrikan», 0)
Подводная лодка конца
Приватное Sub RegisterRegistryChange (rootKey ByVal как keyName RegType, ByVal как watchSubTree шнура, ByVal как интежер)
'Обнаруживает извещения регистратуры.
Если RegOpenKeyEx (rootKey, keyName, 0, 0, hKey) <> 0 после этого
MsgBox («RegOpenKeyEx failed.")
Возвращение
Закончитесь если
'TODO: /установки фильтра изменения здесь
hChangeHandle = CeFindFirstRegChange (hKey, watchSubTree, RegNotifyFilter.REG_NOTIFY_CHANGE_LAST_SET)
Если hChangeHandle.ToInt32 = -1 после этого
MsgBox («CeFindFirstRegChange потерпело неудачу»)
RegCloseKey (hKey)
Возвращение
Закончитесь если
Сделайте пока bCancel <> поистине
WaitForSingleObject (hChangeHandle, Timeout.Infinite)
MsgBox («изменение обнаружило! ")
CeFindNextRegChange (hChangeHandle)
Thread.Sleep (0)
Петля
'TODO: /
CeFindCloseRegChange (hChangeHandle)
RegCloseKey (hKey)
Подводная лодка конца
Общественное Sub DebugCreateRegistryEntry ()
'Создает определенный ключа в регистратуре для доводка.
Тусклое rk как RegistryKey = Registry.LocalMachine.OpenSubKey («средство программирования», поистине)
rk.CreateSubKey («fabrikan»)
rk. Закройте ()
Закончите подводную лодку
Общественное Sub DebugChangeRegistryValue ()
'Сымитируйте изменение в регистратуре для доводка.
Затемните rk как RegistryKey = Registry.LocalMachine.OpenSubKey («средство программирования \ fabrikan», поистине)
rk.SetValue («fabrikans», TimeOfDay.Second.ToString, RegistryValueKind.String)
rk. Закройте ()
Закончите подводную лодку
Закончите тип
|