• HookImpl


    今天试着写了一个HOOKIMPL  WTL用的,感觉还好..就是只能单实例...以后再加

     1 #pragma once
     2 
     3 template <typename T>
     4 class ATL_NO_VTABLE CHookImpl
     5 {
     6     UINT WM_HOOKIMPL;
     7     HHOOK m_hHook;
     8     static T* m_pT;
     9 public:
    10     CHookImpl( UINT nMsgHook = WM_USER + 0x3000 ) : WM_HOOKIMPL( nMsgHook ), m_hHook( NULL )
    11     {
    12         m_pT = static_cast<T*>( this );
    13     }
    14 
    15     ~CHookImpl()
    16     {
    17         if ( m_hHook )
    18         {
    19             ::UnhookWindowsHookEx( m_hHook );
    20         }
    21     }
    22 
    23     bool InstallHook( int nHookType )
    24     {
    25         if ( m_hHook )
    26         {
    27             if ( !::UnhookWindowsHookEx( m_hHook ) )
    28             {
    29                 return false;
    30             }
    31         }
    32 
    33         m_hHook = ::SetWindowsHookEx( nHookType, _FunHookProc, ModuleHelper::GetModuleInstance(), 0 );
    34 
    35         return m_hHook != NULL;
    36     }
    37 
    38     bool RemoveHook()
    39     {
    40         if ( m_hHook && ::UnhookWindowsHookEx( m_hHook ) )
    41         {
    42             m_hHook = NULL;
    43             return true;
    44         }
    45 
    46         return false;
    47     }
    48 
    49     static LRESULT CALLBACK _FunHookProc( int nCode, WPARAM wParam, LPARAM lParam )
    50     {
    51         LRESULT lRet;
    52 
    53         lRet = ::CallNextHookEx( m_pT->m_hHook, nCode, wParam, lParam );
    54 
    55         if ( nCode == HC_ACTION )
    56         {
    57             ::SendMessage( m_pT->m_hWnd, m_pT->WM_HOOKIMPL, wParam, lParam );
    58         }
    59 
    60         return lRet;
    61     }
    62 
    63 
    64     BEGIN_MSG_MAP( CHookImpl<T> )
    65         MESSAGE_HANDLER( WM_HOOKIMPL, OnHookAction )
    66     END_MSG_MAP()
    67 
    68 
    69     LRESULT OnHookAction( UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& bHandled )
    70     {
    71         m_pT->HookAction( wParam, lParam );
    72         bHandled = TRUE;
    73         return 0;
    74     }
    75 
    76     void HookAction( WPARAM /*wParam*/, LPARAM /*lParam*/ )
    77     {
    78         ATLASSERT( FALSE );
    79     }
    80 };
    81 
    82 template<typename T>
    83 T* CHookImpl<T>::m_pT = NULL;
  • 相关阅读:
    最长公共前缀
    无重复字符的最长子串
    文章采集代码
    网络验证常见的攻击方式与防御手段
    初创公司如何避免服务器被攻击
    拒绝ssh远程暴力破解
    我公司开了7年,靠的就是这套顶级销售打法撑下来!
    顶级销售的十个习惯,轻松签下百万千万合同!(值得背下来)
    顶级销售高手总结的 9 个方面
    一位顶级销售高手总结的“销售心得”!
  • 原文地址:https://www.cnblogs.com/javado/p/2713502.html
Copyright © 2020-2023  润新知