请问delphi中如何截取qq聊天内容中的输入框中文字。并且进行转换。 
比如要把“人民币,你好”替换成“美元,你好”。 在qq的输入框中输入了“人民币,你好”,按下ctrl+回车后,发送的就是 
“美元,你好”。 请问如何实现,给个具体例子让我学习下,非常感谢!

解决方案 »

  1.   

    使用WH_CBT类型的Hook
    只要你的聊天窗体激活的时候(ncode=HCBT_SETFOCUS),就触发!然后
    使用GetWindowText来获得当前获得焦点的窗体的句柄(句柄是传递的WParam参数,通过该句柄找到主窗口句柄)
    然后再找文本框的句柄!找到之后,使用SendMessage发送修改文本消息就可以了。
      

  2.   

    QQ修改输入框的文字很简单,我可以帮你实现,关键是钩子,我可能帮你写不好。要钩到窗口的Ctrl+Enter键,还要钩到鼠标单击“发送”按扭的单击。
      

  3.   

    QQ修改输入框的文字很简单不会吧,"很简单"?????
    要钩到窗口的Ctrl+Enter键,还要钩到鼠标单击“发送”按扭的单击。这个确实很重要!本来想用一个全局的键盘钩子来实现,看来考虑欠妥当!给个具体例子让我学习下,非常感谢!
      

  4.   


    是很简单。代码如下:var
      s:String;
    begin
     s:='中华人民共和国';
    //先用其它句柄查看工具得到RichEdit20A的句柄,例如句柄是“661940”,则用:
     SendMessage(661940,EM_REPLACESEL,0,INTEGER(PCHAR(s)));
    //发消息,如果有选定的则直接替换,如果没有选定的则在光标所在处添加。如果要替换,你直接先发一个全选,再发上述消息即可。QQ对消息进行了过滤,发送WM_SetText消息肯定不行。但可以用EM_REPLACESEL消息!希望我的回答对你有所帮助!
      

  5.   


    相当有帮助,不知EM_REPLACESEL是什么样的消息?
    当此帖问题解决后,也就是hook部分.一起给分,其实,你就能解决,不知愿意帮忙不?
      

  6.   

    EM_REPLACESEL是替换消息,如果有选定的则直接替换,如果没有选定的则在光标所在处添加。是的,被你猜中了,你的问题其实我如果要认真帮你,是完全可以解决掉的。只不过要花费我大量的时间,所以有些不值。恕我这个人有话直说太难听!我没有编写过截获其它EXE上快捷键及按扭单击事件的消息。所以没有现成的代码帮你改写,而自己写出来当然需要花些时间……
      

  7.   

    建议你将贴子加到200分,如果你能求得截到QQ窗口的Ctrl+Enter键,还能钩到鼠标单击“发送”按扭的单击。你把这份代码共享给我,那么,我会给你100分对你补偿。当然,如果你求不到,我是不会补分给你。这叫“有风险投资”。
      

  8.   

    WH_CBT Hook 
    在以下事件之前,系统都会调用WH_CBT Hook子程,这些事件包括: 
    1. 激活,建立,销毁,最小化,最大化,移动,改变尺寸等窗口事件; 
    2. 完成系统指令; 
    3. 来自系统消息队列中的移动鼠标,键盘事件; 
    4. 设置输入焦点事件; 
    5. 同步系统消息队列事件。 
    这个钩子确实可以在弹出聊天窗口时安装激活.
    但下一步,有点迷糊.另外这个钩子好像不可以截获窗口的"发送"按钮和"ctrl+回车"发送的功能,不知有哪个钩子可以同时完成这个的?如果单独截获ctrl+回车,这个用键盘钩子我就能做到.再有一点,是如何发送给输入框全选消息?
      

  9.   

    内存修改咯。首先调试,找到QQ里的SEND函数,在SEND函数之前,程序会调用发送数据加密前的明文的内存地址,线程注入或是写个DLL插进去,把调用的那个内存的CALL的地址换成自己过程的地址,然后的事就是自己程序的事了,在自己的过程里改完之后跳回去。说的很笼统,但如果你会汇编、调试,会HOOKAPI,写过外挂,你就会很明白的。
      

  10.   

    但如果你会汇编、调试,会HOOKAPI,写过外挂,你就会很明白的。
    我如果会这些,就好了!
      

  11.   


    SendMessage(Handle, EM_SETSEL, 0, -1);再次顶一下你的问题!
      

  12.   

    SendMessage(Handle, EM_SETSEL, 0, -1); 比如要把“人民币,你好”替换成“美元,你好”。 如果输入框输入“人民币,你好”,要替换成“美元,你好”。 
    我只想选择人民币,不知能不能这样选择呢?一句话中,只选择符合自己要求的几个字进行替换?
      

  13.   

    对于QQ来说,大多人下手干这事了,QQ现在早防着一手啦
      

  14.   

    可以实现,可以发消息选中输入框中输入的“人民币,你好”然后再发消息替换成“美元,你好”。 我是这样想的,ctrl+回车或点发送之前,我先取出输入框的所有文字,进行判断,当含有"人民币"时,把它删除,改成"美元".以前只是判断过字符串中含有哪个字符,没有取出又插入的,另外,我也不可能判断“人民币,你好”这么多,我只能判断“人民币,如果字符串有,就删除,插入“美元另外,写这个纯属自娱.对现在的qq2009,根本不起作用.这我知道!
      

  15.   

    http://topic.csdn.net/u/20080823/12/4809D94A-7CF4-471F-87DE-370F587902FA.html
    之前有人问过,关于2009输入框句柄的问题,如果你能解决,哪个人的分也会给你的.
      

  16.   

    你加我QQ吧179090319,其实就是用hook,跟SetWindowLong实现就可以了