共计 1025 个字符,预计需要花费 3 分钟才能阅读完成。
这篇文章主要介绍如何应用 SetWinEventHook 截获 Windows 事件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
用 SetWindowsHookEx 可以截获 Windows 中的消息,然而对于更高级一点的 Windows 事件 (如: 弹出菜单事件、ATL+TAB 切换事件等等), 可以用 SetWinEventHook 来截获.
SetWinEventHook 创建的钩子也分为进程内和进程外两种, 进程内钩子效率高但必须以 DLL 形式存在,因为其须映射到别的进程中. 在这个 Demo 中我采用进程外钩子来截获所有事件。
钩子例程如下所示:
VOID CALLBACK WinEventsProc( HWINEVENTHOOK hWinEventHook, DWORD dwEvent, HWND hwnd, LONG idObject, LONG idChild, DWORD dwEventThread, DWORD dwmsEventTime )
{
switch( dwEvent )
{
case EVENT_SYSTEM_SWITCHSTART:
AtlMessageBox( NULL, _T( Alt+Tab 开始) );
break;
case EVENT_SYSTEM_SWITCHEND:
AtlMessageBox( NULL, _T( Alt+Tab 结束) );
break;
case EVENT_SYSTEM_MENUPOPUPSTART:
AtlMessageBox( NULL, _T( 弹出菜单开始) );
break;
case EVENT_SYSTEM_MENUPOPUPEND:
AtlMessageBox( NULL, _T( 弹出菜单开始) );
break;
}
}
安装进程外 HOOK(截获所有进程的所有事件):
HWINEVENTHOOK hHook = ::SetWinEventHook( EVENT_MIN , EVENT_MAX , NULL, WinEventsProc, 0, 0, WINEVENT_OUTOFCONTEXT );
使用完一定要记得卸载 HOOK:
::UnhookWinEvent( hHook );
以上是“如何应用 SetWinEventHook 截获 Windows 事件”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注丸趣 TV 行业资讯频道!