我的一个朋友最近作了一个程序,这个程序能够拦截用户键入的任何英文字符。但是他想拦截用户输入的汉字。遗憾的是键盘钩子根本无法获得。而且处于中文输入状态下,连输入的字符也无法获得。各位朋友,你知道如何获得获得这些输入的汉字。
   我也想使用API HOOK实现但是不知道拦截那些API函数。如果想从驱动程序实现,也可以无论是VXD或者WDM驱动程序,我都想知道拦截那些服务。我知道拦截服务的办法,但是不知道输入法驱动程序使用了哪些服务?
   如果你有很好的建议,不妨告诉我?分数不够,我可以再补。

解决方案 »

  1.   

    不知道你的输入是否被IME拦截?WM_CHAR, WM_IME_CHAR 这两个消息可以。汉字的输入实际上是两个WM_CHAR,用内码就可以判断是否输入的是否是汉字字符。如果是,汉字两个字节的最高位都是1,连续两次判断就可以做到。即每次的CHAR字符的最高位是否是1,如果是,记住这个字符,然后当下CHAR字符来到是,如果最高位还是1,就可以将这两个字符合成汉字。从而达到你的目的。如果有时间看看IME/IMM
      

  2.   

    我对IME/IMM不太了解,尤其是输入法的制作,这需要使用DDK. 不知道你有没有试验过。对于一个编辑框控件接管其WM_CHAR、WM_IME_CHAR消息,在汉字输入状态下,能收到汉字的机内码吗?另外需不需要考虑UNICODE编码的汉字。另外如果这样的话。只要在钩子函数处理中,处理一下WM_CHAR、WM_IME_CHAR,应该是件很容易的事情。只是还要处理BACKSPACE、DEL按键。还不如直接处理WM_GETTEXT、WM_SETTEXT、GetWindowText来的直接。这种情况下,与汉字输入的方法无关,哪怕是手写输入,剪贴板粘贴都可以截获,而且记录的只是结果,而不是实现的过程。
     tigerfox(混合体:=初级程序员) 谢谢。