我用注入MSN进程的方法能够hook住ExtTextOut函数,并将文字保存。但是当MSN收到新消息时,或者刷新时,又会重新调用ExtTextOut函数,造成捕捉的信息重复,而且由于坐标不一样,所以没想到办法区分。请教各位大虾该怎么解决?比如我的MSN取名叫A, 有个朋友B发来一句:“你好吗?”
 然后A(我)回一句:“挺好的,谢谢”。结果捕捉到的字符串是:
23:58:07 x:60 y:58  B 说:
你好吗?
23:58:07 x:138 y:58  说:
你好吗?
23:58:07 x:60 y:58  B 说:
你好吗?
23:58:07 x:138 y:58  说:
你好吗?
23:58:09 x:60 y:58  B 说:
你好吗?
23:58:09 x:138 y:58  说:
你好吗?
23:58:09 x:60 y:58  B 说:
你好吗?
23:58:09 x:138 y:58  说:
你好吗?
23:58:10 x:60 y:58  B 说:
你好吗?
23:58:10 x:138 y:58  说:
你好吗?
23:58:10 x:60 y:58  B 说:
你好吗?
23:58:10 x:138 y:58  说:
你好吗?
23:58:10 x:182 y:153  B 说:
?你好吗?
23:58:10 x:182 y:153  B 说:
?你好吗?
23:58:10 x:182 y:153  B 说:
?你好吗?
23:58:19 x:182 y:153  B 说:
?你好吗?
A 说:
?挺好的,谢谢
23:58:19 x:200 y:170  你好吗?
A 说:
?挺好的,谢谢
23:58:19 x:182 y:187  A 说:
?挺好的,谢谢
23:58:25 x:182 y:153  B 说:
?你好吗?
A 说:
?挺好的,谢谢
23:58:25 x:200 y:170  你好吗?
A 说:
?挺好的,谢谢
23:58:25 x:182 y:187  A 说:
?挺好的,谢谢

解决方案 »

  1.   

    我想我知道你的意思了.......囧,那么换个思路ExtTextOut这个函数是存在句柄,字号,颜色等各种信息的,如果从句柄来区分,应该可以略掉一部分文字吧
      

  2.   

    你勾住ExtTextOut的思路不妥当
    内容区刷新,重画,滚动都会导致反复输出相同文本。
    而且同一段文本在输出时,也会出现多次。
      

  3.   


    是啊,的确有这个问题,所以一直没有找到解决的办法。我看有人用hook CreateTextServices的方法,不知道能不能解决这个问题?兄弟你有何高见,请不吝赐教。
      

  4.   

    function CreateTextServices(punkOuter:IUnknown;pITextHost:ITextHost;
    var ppUnk:IUnknown):HResult; ITextHost编译不通过,应该uses哪个啊?