如何应用SetWinEventHook截获Windows事件

70次阅读
没有评论

共计 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 行业资讯频道!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-25发表,共计1025字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)