Я пытаюсь поймать событие заставки. Это мой код:
#include "stdafx.h"#include <iostream>
#include "stdio.h"
#include <Windows.h>HHOOK _hook;
LRESULT CALLBACK HookCallback(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode >= 0)
{LPMSG msg = (LPMSG)lParam;
if(msg->message == WM_SYSCOMMAND)
{
if (msg->wParam == SC_SCREENSAVE)
{
std::cout<<"SC_SCREENSAVE\n";
}
}
}
return CallNextHookEx(_hook, nCode, wParam, lParam);
}
void SetHook()
{
if (!(_hook = SetWindowsHookEx(WH_GETMESSAGE, HookCallback,NULL , 0)))
{
std::cout<<"Failed to install hook!\n";
}
}
void ReleaseHook()
{
UnhookWindowsHookEx(_hook);
}int _tmain(int argc, _TCHAR* argv[])
{
SetHook();
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
}
ReleaseHook();
return 0;
}
Функция SetWindowsHookEx(WH_GETMESSAGE, HookCallback,NULL , 0)
выходит из строя. Возвращает код:
ошибка 1428: невозможно установить нелокальный хук без дескриптора модуля
.Что я делаю неправильно?
Спасибо!
Общесистемные хуки требуют, чтобы приложение имело повышенный доступ.
Вам нужно запустить свой код от имени администратора.
Может быть, вам будет интересно этот вопрос ответ.
Других решений пока нет …