求助:我在做一个程序,目的是在后台实现对键盘输入的字符进行拦截,比如说在一个应用程序中的一个文本框中我输入一行数字,然后由应用程序生成一个文本文件,要求是在生成文件前我要先对这个数字进行一下判别,即将此数字发送到server进行判别,如果是我要,留下来发送给应用程序生成报告,如果不是则不给应用程序.我的想法就是在输入文本框前就进行拦截,在输入文本框后拦截会更麻烦.望有哪位高手给予指点?不甚感激.

解决方案 »

  1.   

    我估计也要用键盘钩子,但是要在基于文本框输入的应用程序前拦截键盘输入,并判断,用钩子我不怎么会用,能否给出相关源码?听说好想要用到什么buffer,望高手指点!
      

  2.   

    被拦截的那个程序是你写的?那还用什么HOOK啊。直接处理即可。。如果不是也可以不用HOOK,但是相对麻烦点,,,,你去网上找找KEYHOOK.DLL的代码,但是是C++的还得改,偶不会。其实不HOOK也成,得到键盘输入,然后发送给输入框指定的消息来改变它的文本实现过滤即可
      

  3.   

    zcsor(偶业余的斗胆写点blog)~~~~~~~~~~~~
    这位大虾正说清楚了吾意,被拦截的那个程序关键不是我写的,是我写的就不用拦截这么麻烦了,不知道后面的哪位如果能够看到回贴,麻烦再说详细点,我用的是VB,不是C++哦,主要就是对一个应用程序进行拦截后再过滤输入号码,就是这么简单,可是偶不会,请教各位大虾了!
      

  4.   

    你这个问题说起来简单,但有很多问题你没有考虑,首先你要用findwindows()等API函数获得该应用程序的句柄,然后获取该文本框的句柄,现在你有两个选择处理该问题,第一是用API获知该文本框是不是获得了输入焦点,如果获得了输入焦点则用sendmessage() API返回该文本框内容然后判断,同时封锁该软件的其他部件不能获得焦点(具体不清楚你何时生成文件,我假设你输入完数字后按一个回车表示输入完成),当允许生成,发送一个回车消息,不行继续等待。第二种方法是,建立全局键盘HOOK,首先确认输入框获得焦点,然后开始记录所有键盘事件,当检测到回车键则先吃掉该消息,返回截取信息作分析,若符合发送回车消息,不符合继续等待并记录。
      

  5.   

    luxu365说的比较清楚,有没有更详细一点的,最好有源码,小的是个初学者,在此谢谢luxu365的回复!
    如luxu365所说,那个应用程序窗口的句柄应该是一成不变的吧,不会随机变化吧?想获取一个窗口句柄可能比较简单,看到网上有好多相关资料,如果我想获取那个别人做的应用程序的文本框的句柄应该怎么获得啊,有谁知道能告诉我?我给追加分!感激不尽
      

  6.   

    这个我影镜说得很清楚了,关键的思路和API都有了,你应该去下载一个API大全,察看Findwindows()、FindwindowsExA()、Sendmessage()、keybd_event()、CallNextHookEx()、GetKeyboardLayout等API函数的具体使用方法和功能,源代码还是自己写吧,自己研究出来的还是比较好的,我只是提供一个思路而已。另外应用程序的句柄是在程序启动时由操作系统随机分配的,不是固定的,所以要用到上列函数中的几个获得这个句柄,关于键盘HOOK的问题你可以查看我回答的另外一个帖子。另外记得给分^^
    http://community.csdn.net/Expert/TopicView.asp?id=5355794