C++窗口钩子demo
时间: 2023-08-12 17:56:29 浏览: 176
以下是一个简单的C++窗口钩子的示例代码:
```cpp
#include <iostream>
#include <Windows.h>
// 窗口钩子回调函数
LRESULT CALLBACK WindowHookCallback(int nCode, WPARAM wParam, LPARAM lParam)
{
// 判断事件类型
if (nCode == HC_ACTION)
{
// 获取窗口消息结构体
CWPSTRUCT* pMsg = (CWPSTRUCT*)lParam;
// 判断消息类型
if (pMsg->message == WM_ACTIVATE)
{
// 窗口激活事件发生时执行自定义逻辑
std::cout << "Window activated!" << std::endl;
}
}
// 调用下一个钩子或者默认处理
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
int main()
{
// 安装窗口钩子
HHOOK hHook = SetWindowsHookEx(WH_CALLWNDPROC, WindowHookCallback, NULL, 0);
if (hHook == NULL)
{
std::cout << "Failed to install window hook!" << std::endl;
return 1;
}
// 进入消息循环
MSG msg;
while (GetMessage(&msg, NULL, 0, 0) > 0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
// 卸载窗口钩子
UnhookWindowsHookEx(hHook);
return 0;
}
```
上述示例代码演示了如何使用`SetWindowsHookEx`函数安装窗口钩子,并在窗口激活事件发生时执行自定义逻辑。需要注意的是,该示例仅监听窗口激活事件(`WM_ACTIVATE`消息),你可以根据需要修改钩子回调函数中的逻辑和事件类型。
请注意,窗口钩子需要在一个消息循环中运行,以便接收系统发送的消息并进行处理。示例代码中的`while`循环用于获取和分发消息,直到获取到退出消息为止。
在实际使用中,你可能需要根据具体的需求和事件类型来编写钩子回调函数的逻辑。此外,还需要注意在适当的时候卸载钩子,以避免对系统造成不必要的影响。
阅读全文