捕获WM_IME_NOTIFY,应该用哪种钩子?

langfanyu 2011-06-02 01:01:41
看了微软拼音输入法团队博客的这篇文章,用了里面说的WH_GETMESSAGE但是捕获不到……

http://blog.sina.com.cn/s/blog_636d0dee0100mxl8.html
...全文
252 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
langfanyu 2011-06-02
  • 打赏
  • 举报
回复
楼上提醒得对。
simoreg 2011-06-02
  • 打赏
  • 举报
回复
直接return 了呀

LRESULT CALLBACK iHook(int nCode, WPARAM wParam, LPARAM lParam)
{
BOOL boRet;
boRet=CallNextHookEx(OKHook, nCode, wParam, lParam);


PMSG pmsg = (PMSG)lParam;
if (pmsg->message == WM_IME_NOTIFY)

{
//显示捕获成功
}


return boRet;


}
当然,你也可以把CallNextHookEx放在最后面,只不过这样你的程序会影响到其它的钩子程序
langfanyu 2011-06-02
  • 打赏
  • 举报
回复
知道原因所在了,
把PMSG xxxx = (PMSG)lParam;
改成PCWPSTRUCT xxxx = (PCWPSTRUCT)lParam; 就可以捕获到WM_IME_NOTIFY了

2楼的高手言简意赅,确实是要用WH_CALLWNDPROC来捕获而不是用WH_GETMESSAGE,我没料到微软拼音自己的人都会弄错,还写成文章贴了出来

我就是想捕获微软拼音的中英文状态……
langfanyu 2011-06-02
  • 打赏
  • 举报
回复
不行,用WH_CALLWNDPROC也捕获不到。

以下是我的钩子的代码:

LRESULT CALLBACK iHook(int nCode, WPARAM wParam, LPARAM lParam)
{

if (nCode < 0)
return CallNextHookEx(OKHook, nCode, wParam, lParam);


PMSG pmsg = (PMSG)lParam;
if (pmsg->message == WM_IME_NOTIFY)

{
//显示捕获成功
}


return CallNextHookEx(OKHook, nCode, wParam, lParam);


}
Lactoferrin 2011-06-02
  • 打赏
  • 举报
回复
WH_CALLWNDPROC

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧