SetWindowsHookExW与SetWinEventHook
来源:互联网 发布:pptv网络电视在线直播 编辑:程序博客网 时间:2024/06/06 07:51
今天用消息钩子SetWindowsHookExW和事件钩子SetWinEventHook完成了对鼠标按下弹起消息和窗体移动事件的捕获。
当然也可以不用创建线程,把其中的处理过程写在主函数里。
#include<iostream>#include<windows.h>using namespace std;void CALLBACK MyWinEventProc(HWINEVENTHOOK hWinEventHook, DWORD dwEvent, HWND hwnd, LONG idObject, LONG idChild, DWORD dwEventThread, DWORD dwmsEventTime){switch (dwEvent){case EVENT_SYSTEM_MOVESIZESTART:cout << "EVENT_SYSTEM_MOVESIZESTART" << endl;break;case EVENT_SYSTEM_MOVESIZEEND:cout << "EVENT_SYSTEM_MOVESIZEEND" << endl;break;}}LRESULT CALLBACK LowLevelMouseProc(int nCode,WPARAM wParam,LPARAM lParam){if (wParam == WM_LBUTTONDOWN){cout << "WM_LBUTTONDOWN" << endl;}else if (wParam == WM_LBUTTONUP){cout << "WM_LBUTTONUP" << endl;}return CallNextHookEx(0, nCode, wParam, lParam);}DWORD WINAPI Message_ThreadProc(LPVOID lpParameter){MSG msg;HHOOK mouse_hook = SetWindowsHookExW(WH_MOUSE_LL, LowLevelMouseProc, GetModuleHandleW(0), 0);if (mouse_hook == NULL){}HWINEVENTHOOK event_hook = ::SetWinEventHook(EVENT_MIN, EVENT_MAX, NULL, MyWinEventProc, 0, 0, WINEVENT_OUTOFCONTEXT);if (event_hook == NULL){}while (GetMessageW(&msg, 0, 0, 0))DispatchMessageW(&msg);return 0;}int main(){HANDLE Message_ThreadHandle = CreateThread(0, 0, Message_ThreadProc, NULL, 0, NULL);while (1);return 0;}
最后记得用UnhookWinEvent和UnhookWindowsHookEx释放资源。
注:
WH_MOUSE_LL是低级鼠标钩子,不用新建dll即可捕获全局消息。
SetWinEventHook事件钩子都不用新建dll即可捕获全局事件。
阅读全文
0 0
- SetWindowsHookExW与SetWinEventHook
- SetWinEventHook 事件钩子
- 0.ring3-SetWinEventHook和SetWindowsHookEx
- SetWinEventHook和SetWindowsHookEx的异同
- SetWinEventHook和SetWindowsHookEx的异同
- 与
- 与
- “” 与 “”
- ##与#
- >> 与 > >
- :与::
- &与&&
- && 与 &
- [[与((
- >>与>>>
- *与++
- *与++
- ++与++
- struts2核心过滤器
- 蟒蛇绘制程序
- 室外低功耗GPS定位漂移的解决方法
- kali 首次启动metasploit
- Android RecyclerView(超简单)实现可展开列表——单项展开
- SetWindowsHookExW与SetWinEventHook
- iOS 等待异步线程结束再执行后续代码
- 使用VisualVM分析性能
- 如何把list变成一个字符串
- JQuery DOM
- python Requests详解
- Value '0000-00-00' can not be represented as java.sql.Date
- spring的核心监听器
- log4j 使用