Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2016.02.14;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2016.02.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.001 c
4-1275893282
apic
2010-06-07 10:48
2016.02.14
Как отследить изменения в определенной ветке реестра?


2-1405621661
sanya_m
2014-07-17 22:27
2016.02.14
Удаление из TADOQuery записей


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


2-1405507035
FIL-23
2014-07-16 14:37
2016.02.14
дискриптор окна mstsc, не реагируют на функцию SetForegroundWind


2-1406470466
p
2014-07-27 18:14
2016.02.14
Перевести на С





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский