2
我想捕捉屏幕保护程序事件。这是我的代码:捕捉屏幕保护程序事件
#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:无法设置非挂钩没有模块句柄
。什么我做错了什么? 谢谢!
Windows没有'GetLastError'函数(或类似的东西)来获取更多关于为什么以前的API调用失败的信息?你尝试过吗? – Mat 2013-05-05 11:54:37
@Mat - 我会试试... – Sanich 2013-05-05 11:57:47
这看起来只有一半的消息循环。 – Benj 2013-05-05 12:01:50