//监视HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run项 #include <windows.h> //定义一个监视注册表启动项的函数 int reg() { HANDLE hNotify; HKEY hKeyx; //DWORD dwRes; hNotify = CreateEvent(NULL, //不使用SECURITY_ATTRIBUTES结构 FALSE, //不自动重置 TRUE, //设置初始状态 "RegistryNotify" //事件对象的名称 ); if (hNotify == 0) { MessageBox(NULL,"CreateEvent failed"," ",MB_OK); ExitProcess(0); } if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, //根键 "Software\\Microsoft\\Windows\\CurrentVersion\\Run", //子键 0, //reserved KEY_NOTIFY, //监视用 &hKeyx //保存句柄 ) != ERROR_SUCCESS) { CloseHandle(hNotify); MessageBox(NULL,"RegOpenKeyEx failed"," ",MB_OK); ExitProcess(0); } if (RegNotifyChangeKeyValue(hKeyx, //监视子键句柄 TRUE, //监视此项的子键 REG_NOTIFY_CHANGE_NAME | REG_NOTIFY_CHANGE_LAST_SET, //监视增加或删除了子键,监视键值发生是否改变 hNotify, //接受注册表变化事件的事件对象句柄 TRUE //注册表变化前报告 ) != ERROR_SUCCESS) { CloseHandle(hNotify); RegCloseKey(hKeyx); MessageBox(NULL,"RegNotifyChangeKeyValue failed"," ", MB_OK); ExitProcess(0); } if (WaitForSingleObject(hNotify, INFINITE) != WAIT_FAILED) { MessageBox(NULL,"注册表有改动"," ",MB_OK); } CloseHandle(hNotify); RegCloseKey(hKeyx); return 0; } void main() { // DWORD ID; // CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)reg, NULL, 0, &ID); //创建线程 // printf("ok\n"); reg(); }