c语言循环解除,全局钩子_全局钩子c语言_解除全局钩子

c64137793071cf39df88274b82b6e00e.png

这个问题搜索一下,有不少帖子,但都没有真正的结论。

我也试验了好久,觉得眼看就要成功了,拿出来跟大家讨论讨论。

首先,要把POST和SENDMESSAGE的函数都勾进去,即sendmessageproc,getmessageproc因为WM_CHAR用于截获英文字符,用GETMESSAGE,但WM_IME开头的

一系列函数必须用SENDMESSAGE。截获汉字用WM_IME_CHAR,但不够!IE,WORD等都无法截获。

……我就做到这里,快考试了,比较忙,因此这个思路还没有调通。大家试试看吧!有好消息分享出来

另外一个思路是APIHOOK注入IME输入法,我很不赞同这种方法,

毕竟APIHOOK很,把所有进程都FUCK了。:)notice:表示关注或者转贴搜索帖子的不给分

不错,用WH_CALLWNDPROC的钩子截获WM_IME_COMPOSITION消息if(cs->message==WM_IME_COMPOSITION)//截获中文输入

{

if(cs->lParam&GCS_RESULTSTR)

{

HIMChImc;

DWORDdwSize;

char*Buf;hImc=ImmGetContext(GetActiveWindow());

dwSize=ImmGetCompositionString(hImc,GCS_RESULTSTR,NULL,0);

Buf=newchar[dwSize+1];ImmGetCompositionString(hImc,GCS_RESULTSTR,(LPVOID)Buf,dwSize);Buf[dwSize]='\0';

ImmReleaseContext(GetActiveWindow(),hImc);Form1->Memo1->Lines->Add(">:"+AnsiString(Buf));

deleteBuf;

}

}

我试了一下:luckypopy(菜鸟)的方法,截获了双份,就是说,在我使用微软拼音打出一个句子后,这个消息出现了两次。

还有问一个Dll的问题;):

我要在Dll中截获,并且得到字符串,那么我应该怎样传给应用程序呢?肯定不能用指针,我试了使用GlobalAlloc()发现不行,(我设的是Moveable的)

请大家到下面这个连接去继续讨论。谢谢

?id=1403176

通过我连续3天的奋斗,我明白一个道理。

Windows的IME消息很多,很多!

而各输入法处理这些消息的方法不同,表现出来的就是微软拼音2。0和3。0的一个显著不同就是空格的作用,3。0可以用空格代替回车。

而那些全拼,紫光,智能ABC,更是乱七八糟,一塌糊涂。

开发输入法很难,但是做个输入法的钩子更难。只能针对一个特定的输入法才行!!而这样做,似乎意义不大了。难道针对每一个市面上的输入法都做一个。或者自己做个通用的,可以设置各种参数的钩子!看来还是要先做一个输入法才行!

光截IME消息是不够的.有时候一些IME程序不是很标准.而且一两个IME消息也不行.

我看还是APIHOOK机制好点.在类似SetWindowText,TextOut....函数,得到汉字消息,然后再搞个管理模块,把得到的汉字消息发送此处.不知道我的想法,可行否

我奋斗的结果,就是基本上各种输入法在XP下没问题了,

毕竟应用程序和输入法之间的接口必须固定,而我们截获的

正是这个接口可是在特殊情况下,比如输入法不停切换时就会发生丢字甚至乱码

相信是可以完善的

看看有的跟贴,好像有人还不懂什么是全局键盘钩子

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/jisuanjixue/article-25252-1.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值