您的位置:首页 > 其它

OCX中使用钩子HOOK消息

2016-03-24 09:56 387 查看

使用背景

有些消息是只发给顶层窗口的,OCX被加载到网页中后,有些消息就接收不到,这时候需要我们用hook来截取消息。

使用步骤

1.首先在OCX的cpp文件中声明一个全局变量:

static HHOOK hHook=NULL;

2.定义hHook处理函数:

LRESULT CALLBACK GetMessageProc(int nCode, WPARAM wParam, LPARAM lParam)

{

 LPMSG lpMsg = (LPMSG) lParam;

 if( (nCode >= 0) && (PM_REMOVE == wParam) &&

  AfxGetApp()->PreTranslateMessage(lpMsg))

 {

  lpMsg->message = WM_NULL;

  lpMsg->lParam = 0L;

  lpMsg->wParam = 0;

 }

 // 将钩子消息传递给当前钩子链中的下一个钩子

 return ::CallNextHookEx(hHook, nCode, wParam, lParam);

}

3.在OCX的"Oncreate"中添加如下代码:

 hHook = ::SetWindowsHookEx(WH_GETMESSAGE, GetMessageProc, 

  AfxGetInstanceHandle(),GetCurrentThreadId());

4.释放资源,在OCX的"OnDestroy"消息中添加如下代码:

VERIFY(::UnhookWindowsHookEx(hHook));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ocx hook 钩子