Мониторинг реестра

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 421
Зарегистрирован: 13.10.2013 (Вс) 14:05

Мониторинг реестра

Сообщение Don Leno » 13.10.2013 (Вс) 14:14

Код: Выделить всё
Private Type SECURITY_ATTRIBUTES
        nLength As Long
        lpSecurityDescriptor As Long
        bInheritHandle As Long
End Type

Private Declare Function CreateEvent Lib "kernel32" Alias "CreateEventA" (lpEventAttributes As SECURITY_ATTRIBUTES, ByVal bManualReset As Long, ByVal bInitialState As Long, ByVal lpName As String) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function RegNotifyChangeKeyValue Lib "advapi32.dll" (ByVal hKey As Long, ByVal bWatchSubtree As Long, ByVal dwNotifyFilter As Long, ByVal hEvent As Long, ByVal fAsynchronus As Long) As Long
Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long

Private Const HKCU = &H80000001
Private Const REG_NOTIFY_CHANGE_NAME = &H1            ' Create or delete (child)
Private Const REG_NOTIFY_CHANGE_ATTRIBUTES = &H2
Private Const REG_NOTIFY_CHANGE_LAST_SET = &H4            ' time stamp
Private Const REG_NOTIFY_CHANGE_SECURITY = &H8
Private Const REG_NOTIFY_ALL = (REG_NOTIFY_CHANGE_NAME Or REG_NOTIFY_CHANGE_ATTRIBUTES Or REG_NOTIFY_CHANGE_LAST_SET Or REG_NOTIFY_CHANGE_SECURITY)

Dim hEvent As Long
Dim AbortWait As Boolean
Dim hReg As Long
Private Sub OpenHKCU()
RegOpenKey HKCU, vbNullString, hReg
End Sub
Private Sub CloseHKCU()
RegCloseKey hReg
End Sub
Private Sub SetRegHook()
RegNotifyChangeKeyValue hReg, CLng(-1), REG_NOTIFY_ALL, hEvent, CLng(-1)
End Sub
Private Sub CreateMyEvent()
Dim sa As SECURITY_ATTRIBUTES
sa.nLength = 0
hEvent = CreateEvent(sa, CLng(0), CLng(0), "my_event_123")
End Sub
Private Sub DestroyMyEvent()
CloseHandle hEvent
End Sub
Private Function WaitForMyEvent() As Boolean
Dim wl As Long
Do Until AbortWait Or (wl <> 0)
DoEvents
wl = WaitForSingleObject(hEvent, 200)
Loop
If AbortWait Then
    WaitForMyEvent = False
Else
    WaitForMyEvent = True
End If

AbortWait = False
End Function
Private Sub StartWatching()
Dim es As Boolean
OpenHKCU
CreateMyEvent
SetRegHook
es = WaitForMyEvent
If es Then
    MsgBox "Что-то в реестре изменилось..."
Else
    MsgBox "Слежка отменена..."
End If
DestroyMyEvent
CloseHKCU
End Sub
Private Sub Command1_Click()
StartWatching
End Sub


Этот код мониторит любые изменения в реестре и просто сообщает об этом. Как мне проверить определенный ключ (или значения)реестра на изменения. В сети не нашел исходников на VB.

[Хакер] :: Используй тег [code]!

Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 421
Зарегистрирован: 13.10.2013 (Вс) 14:05

Re: Мониторинг реестра

Сообщение Don Leno » 14.10.2013 (Пн) 20:39

В итоге сам нашел еще пример и объединил их. Только не работает! Выкладываю исходник проги, мож кто покажет в чем моя ошибка?
Прога ежесекундно должна проверять реестр и если есть какие изменения выдать об этом сообщение.
Вложения
reestr.rar
(2.62 Кб) Скачиваний: 83

Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 421
Зарегистрирован: 13.10.2013 (Вс) 14:05

Re: Мониторинг реестра

Сообщение Don Leno » 14.10.2013 (Пн) 21:18

Исправил ошибку:
Замените строку

Код: Выделить всё
RegNotifyChangeKeyValue lKeyHandle, bWatchSubTree, _
      dwFilters, Hev,True

на

Код: Выделить всё
RegNotifyChangeKeyValue lKeyHandle, bWatchSubTree, _
      dwFilters, Hev, False


Но тогда прога начинает виснуть при выполнении мониторинга ветки реестра. как это исправить?

Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 421
Зарегистрирован: 13.10.2013 (Вс) 14:05

Re: Мониторинг реестра

Сообщение Don Leno » 15.10.2013 (Вт) 18:02

Нашел книгу Дана Эпплмана по WinApi в ней есть листинг кода по перебору значений из реестра. Он считывает принтеры установленые из реестра и показывает в msgbox. Вроде все переписал верно, но не работает. Сейчас скину проект, кто посмотрит и найдет ошибку пишите!
Вложения
DanAplleman reg.rar
(2.12 Кб) Скачиваний: 91

Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 421
Зарегистрирован: 13.10.2013 (Вс) 14:05

Re: Мониторинг реестра

Сообщение Don Leno » 15.10.2013 (Вт) 18:38

Все нашел раб. пример считывания и перебора параметров в реестре и вывод их в msgbox. Конечно не идеал. но уже кое-что. Выкладываю пример:
Вложения
1234.rar
(1.98 Кб) Скачиваний: 111


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 39

    TopList