zoukankan      html  css  js  c++  java
  • 应用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, 00, WINEVENT_OUTOFCONTEXT  );

    使用完一定要记得卸载HOOK:

    ::UnhookWinEvent( hHook );
  • 相关阅读:
    171. Excel Sheet Column Number (Easy)
    349. Intersection of Two Arrays (Easy)
    453. Minimum Moves to Equal Array Elements (Easy)
    657. Judge Route Circle (Easy)
    CSS笔记
    保存页面状态
    UI开发总结
    ubuntu 下配置munin
    反向代理配置
    JavaScript 高级程序设计第二版
  • 原文地址:https://www.cnblogs.com/fangkm/p/1441514.html
Copyright © 2011-2022 走看看