Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2016.02.14;
Скачать: CL | DM;

Вниз

Как отследить изменения в определенной ветке реестра?   Найти похожие ветки 

 
apic   (2010-06-07 10:48) [0]

Как отследить изменения в определенной ветке реестра? Внешнии компоненты не предлагать и не говорить, что есть много готовых программ, готовые программы мне не нужны. Заранее спасибо! Очень буду благодарен за пример исходного кода.


 
Игорь Шевченко ©   (2010-06-07 12:38) [1]

RegNotifyChangeKeyValue


 
apic   (2010-06-07 15:05) [2]

Я знаю, что RegNotifyChangeKeyValue, а как все это реализовать?


 
MBo ©   (2010-06-07 15:14) [3]

а разве MSDN не поможет?


 
Anatoly Podgoretsky ©   (2010-06-07 15:15) [4]

> apic  (07.06.2010 15:05:02)  [2]

Ну я бы для начала попробывал посмотреть в справке, и потом бы задал
конкретный вопрос.
В справке хорошо описаны параметры функции.


 
Игорь Шевченко ©   (2010-06-07 16:37) [5]


> а как все это реализовать?


программу написать


 
DVM ©   (2010-06-07 20:56) [6]


> apic

Тут http://wasm.ru/baixado.php?mode=tool&id=283 исходники старой версии RegMon Руссиновича. Бери, ковыряй.


 
apic   (2010-06-08 10:56) [7]

DVM, спасибо хоть за это!


 
apic   (2010-06-09 05:57) [8]

Короче вот этот исходник с МСДН во всей сети и вжурналя хакер и во всей других периодических изданиях:
#include <windows.h>
#include <tchar.h>
#include <stdio.h>

//void main(int argc, char *argv[])
void __cdecl _tmain(int argc, TCHAR *argv[])
{
  DWORD  dwFilter = REG_NOTIFY_CHANGE_NAME |
                    REG_NOTIFY_CHANGE_ATTRIBUTES |
                    REG_NOTIFY_CHANGE_LAST_SET |
                    REG_NOTIFY_CHANGE_SECURITY;

  HANDLE hEvent;
  HKEY   hMainKey;
  HKEY   hKey;
  LONG   lErrorCode;

  // Display the usage error message.
  if (argc != 3)
  {
     _tprintf(TEXT("Usage: notify [HKLM|HKU|HKCU|HKCR|HCC] [<subkey>]\n"));
     return;
  }

  // Convert parameters to appropriate handles.
  if (_tcscmp(TEXT("HKLM"), argv[1]) == 0) hMainKey=HKEY_LOCAL_MACHINE;
  else if(_tcscmp(TEXT("HKU"), argv[1]) == 0) hMainKey=HKEY_USERS;
  else if(_tcscmp(TEXT("HKCU"), argv[1]) == 0) hMainKey=HKEY_CURRENT_USER;
  else if(_tcscmp(TEXT("HKCR"), argv[1]) == 0) hMainKey=HKEY_CLASSES_ROOT;
  else if(_tcscmp(TEXT("HCC"), argv[1]) == 0) hMainKey=HKEY_CURRENT_CONFIG;
  else
  {
     _tprintf(TEXT("Usage: notify [HKLM|HKU|HKCU|HKCR|HCC] [<subkey>]\n"));
     return;
  }

  // Open a key.
   lErrorCode = RegOpenKeyEx(hMainKey, argv[2], 0, KEY_NOTIFY, &hKey);
  if (lErrorCode != ERROR_SUCCESS)
  {
     _tprintf(TEXT("Error in RegOpenKeyEx (%d).\n"), lErrorCode);
     return;
  }

  // Create an event.
  hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
  if (hEvent == NULL)
  {
     _tprintf(TEXT("Error in CreateEvent (%d).\n"), GetLastError());
     return;
  }

  // Watch the registry key for a change of value.
  lErrorCode = RegNotifyChangeKeyValue(hKey,
                                       TRUE,
                                       dwFilter,
                                       hEvent,
                                       TRUE);
  if (lErrorCode != ERROR_SUCCESS)
  {
     _tprintf(TEXT("Error in RegNotifyChangeKeyValue (%d).\n"), lErrorCode);
     return;
  }

  // Wait for an event to occur.
  _tprintf(TEXT("Waiting for a change in the specified key...\n"));
  if (WaitForSingleObject(hEvent, INFINITE) == WAIT_FAILED)
  {
     _tprintf(TEXT("Error in WaitForSingleObject (%d).\n"), GetLastError());
     return;
  }
  else _tprintf(TEXT("\nChange has occurred.\n"));

  // Close the key.
  lErrorCode = RegCloseKey(hKey);
  if (lErrorCode != ERROR_SUCCESS)
  {
     _tprintf(TEXT("Error in RegCloseKey (%d).\n"), GetLastError());
     return;
  }
 
  // Close the handle.
  if (!CloseHandle(hEvent))
  {
     _tprintf(TEXT("Error in CloseHandle.\n"));
     return;
  }
}
Но он меня БЕСИТ!!! Ну переделал я его на Делфи и чЁЁЁЁЁЁЁЁ?
Все это дело нужно во первых запускать в отдельном потоке, а во вторых как это все б...я, остановить, может я хочу прекратить следить за реестром, или сменить ветку слежения. Пытаюсь завершить поток, у меня тупо звисает главня форма приложения, а эта скотина всеравно продолжает следить за изменениями, это что впринципе не решимая задача, что ли?


 
MBo ©   (2010-06-09 06:15) [9]

>Но он меня БЕСИТ!!!
А ведь пора начать думать. Поток ждет на функции бесконечного ожидания.
Таймаут ей назначить или заменить на WaitForMultipleObjects


 
apic   (2010-06-09 10:18) [10]

MBo спасиб, попробую! Я например вообще не знал о существовании WaitForMultipleObjects, да и как ими правильно пользываться я без понятия, где же в наше время найдешь нормальное описание API на русском?


 
Игорь Шевченко ©   (2010-06-09 10:59) [11]

apic   (09.06.10 10:18) [10]

Учи английский, заплати переводчику, в чем проблема ?



Страницы: 1 вся ветка

Текущий архив: 2016.02.14;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.005 c
2-1406714267
oleg_teacher
2014-07-30 13:57
2016.02.14
Текст на канве


15-1433732777
virex(home)
2015-06-08 06:06
2016.02.14
D7 удаление компонента в форме-предке


15-1433362244
d2pak
2015-06-03 23:10
2016.02.14
P-CAD. Редактор УГО


2-1404906872
Друг
2014-07-09 15:54
2016.02.14
Операция сравнения в дженериках


15-1433179200
Pavelnk
2015-06-01 20:20
2016.02.14
Вот такая графическая задачка