全局键盘钩子取汉字终极大讨论!

flywhc 2003-01-22 09:56:41
加精
这个问题搜索一下,有不少帖子,但都没有真正的结论。
我也试验了好久,觉得眼看就要成功了,拿出来跟大家讨论讨论。


首先,要把POST和SEND MESSAGE的函数都勾进去,即sendmessageproc,getmessageproc

因为WM_CHAR用于截获英文字符,用GETMESSAGE,但WM_IME开头的
一系列函数必须用SENDMESSAGE。

截获汉字用WM_IME_CHAR,但不够!IE,WORD等都无法截获。
经研究发现都是使用的WM_IME_COMPOSITION,内置编辑窗的软件。

这样就要截获WM_IME_COMPOSITION。

这就要通过GetCompositionStr
……

我就做到这里,快考试了,比较忙,因此这个思路还没有调通。

大家试试看吧!有好消息分享出来


另外一个思路是API HOOK注入IME输入法,我很不赞同这种方法,
毕竟API HOOK很暴力,把所有进程都FUCK了。 :)

notice:表示关注或者转贴搜索帖子的不给分
...全文
308 74 打赏 收藏 转发到动态 举报
写回复
用AI写文章
74 条回复
切换为时间正序
请发表友善的回复…
发表回复
bcboy 2003-05-23
  • 打赏
  • 举报
回复
mark
gjq2000 2003-03-10
  • 打赏
  • 举报
回复
我不推一把。
up
喝醉的咖啡 2003-03-10
  • 打赏
  • 举报
回复
开发输入法很难,但是做个输入法的钩子更难。只能针对一个特定的输入法才行!!而这样做,似乎意义不大了。难道针对每一个市面上的输入法都做一个。或者自己做个通用的,可以设置各种参数的钩子!看来还是要先做一个输入法才行!

建议按楼主说的去 fuck IME API... :)
DLL 全局共享的方法有好几种,但问题是一旦调用dll的几个进程都退出了,dll也就退出了,如何继续 hook ?
另外,调试这样的 dll,可以把debug内容dump到文件中去,只要程序没错误,用来分析调试逻辑错误也不算很麻烦。
txdxun 2003-03-03
  • 打赏
  • 举报
回复
gz
boywang 2003-03-01
  • 打赏
  • 举报
回复
问一下,怎么hook api函数。
tuiger2003 2003-02-28
  • 打赏
  • 举报
回复
楼上的
xiaohan13916830(潇寒)
wellcomezhu(加莱)
fengzi_zhu(疯子)

三位帮我大忙的朋友,因为此处不是我的加分帖子,所以请到
VC/MFC 网络编程问题
主题:请问IE浏览器里的文本字段读取问题。。 登记一下,我好给分,再次表示感谢!

as2001 2003-02-27
  • 打赏
  • 举报
回复
关注中
shenzhenscz 2003-02-26
  • 打赏
  • 举报
回复
关于HOOK必须写成DLL:

HOOK是MS提供的服务,因为钩子只是每个模块处理前进行处理,所以HOOK的函数需要和正在接收的该函数的模块具有相同的地址空间,WINDOWS的输入有原始输入线程管理,当你用了HOOK,系统在分发消息时,现调用你的消息处理函数。
你可以不用DLL,那就需要自己动手了,但是你的处理一定要在当前模块的进程地址空间,对吗?
Gladstone 2003-02-26
  • 打赏
  • 举报
回复
gz
蝈蝈太阳 2003-02-26
  • 打赏
  • 举报
回复
GZing...
jyzl_t 2003-02-25
  • 打赏
  • 举报
回复
学习
zy422 2003-02-25
  • 打赏
  • 举报
回复
一点提示:

PostMessage(WM_CHAR,(TCHAR)str&0xFF,0);
PostMessage(WM_KEYDOWN, VK_RETURN,0);

中文好像就是靠它们发出来的哟.

去截获它们发出的消息.
JoshuaLi 2003-02-25
  • 打赏
  • 举报
回复
学习
demetry 2003-02-24
  • 打赏
  • 举报
回复
^_^
DoubleJiang 2003-02-24
  • 打赏
  • 举报
回复
高人
playguy 2003-02-24
  • 打赏
  • 举报
回复
可以去这里看一看,有完整的解决方案,绝对实用:
http://www.aslike.net
tuiger2003 2003-02-23
  • 打赏
  • 举报
回复
哦,这样说来,我必须在我的程序中模拟一个消息,让俺试试 :)
谢谢楼上的朋友。你给的网址提示:

这篇文章还没有审批通过,请稍后……
(说明:推荐给《程序员》杂志的文章只有没被采用,或者已经在杂志上发表了,才会审批通过。)
tuiger2003 2003-02-23
  • 打赏
  • 举报
回复
上面说的非常好,顺便问两个问题:
1、IE中当信息输入完成,按提交或回车提交时,发出的是什么消息?
2、如何对钩子过程进行调试?
fengzi_zhu 2003-02-23
  • 打赏
  • 举报
回复
TO tuiger2003(老虎)

DLL的调试
http://www.csdn.net/Develop/read_article.asp?id=17085
对HOOK DLL的调试,被HOOK的消息必须是用于调试的TEST应用程序里的消息。
fengzi_zhu 2003-02-23
  • 打赏
  • 举报
回复
关于HOOK必须写成DLL:
因为消息是线程所有,hook了某线程的消息,该线程就会去寻找消息的处理函数,如果在本线程中没有的话,这就需要动态连接到有该消息处理函数的文件。
加载更多回复(54)

15,471

社区成员

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

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