#include
#include
#define REG_ONE_KEY "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"
int main()
{
DWORD dwFilter = REG_NOTIFY_CHANGE_NAME | REG_NOTIFY_CHANGE_ATTRIBUTES | REG_NOTIFY_CHANGE_LAST_SET | REG_NOTIFY_CHANGE_SECURITY;
HANDLE hEvent;
HKEY hKey;
LONG lErrorCode;
char szErr[255];
// 打开注册表键
lErrorCode = RegOpenKeyEx(HKEY_LOCAL_MACHINE,REG_ONE_KEY, 0, KEY_NOTIFY, &hKey);
if (lErrorCode != ERROR_SUCCESS)
{
printf(szErr,"Error in RegOpenKeyEx (%d). ", lErrorCode);
return -1;
}
// 创建一个事件对象
hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
if (hEvent == NULL)
{
printf(szErr,"Error in CreateEvent (%d). ", GetLastError());
return -1;
}
while(true)
{
// 监视注册表改动
lErrorCode = RegNotifyChangeKeyValue(hKey,TRUE,dwFilter,hEvent,TRUE);
if (lErrorCode != ERROR_SUCCESS)
{
printf(szErr,"Error in RegNotifyChangeKeyValue (%d). ", lErrorCode);
return -1;
}
// 等待通知事件发生
if (WaitForSingleObject(hEvent, INFINITE) == WAIT_FAILED)
{
return -1;
}
// 通知用户有改动发生
printf("Reg Has Changed!\n");
}
lErrorCode = RegCloseKey(hKey);
if (lErrorCode != ERROR_SUCCESS)
{
return -1;
}
if (!CloseHandle(hEvent))
{
return -1;
}
return 0;
}