hook住ExtTextOut后捕捉到的文字重复怎么办?

时间:2021-06-27 23:55:28
我用注入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 说:
?挺好的,谢谢

9 个解决方案

#1


我的目的是要捕捉住最后的一句话,而不受刷新等操作影响。谢谢了

#2


捕捉里加个判断呗,例如记录上一次捕捉的内容,相同则略过

#3


kankan

#4


引用 2 楼 funxu 的回复:
捕捉里加个判断呗,例如记录上一次捕捉的内容,相同则略过

好像没这么简单。

#5


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

#6


剩下的不好办了,只能把截取的内容通过内存映射或者消息发到你的主程序里,然后由外部程序撰写处理逻辑来过滤了

#7


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

#8


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


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

#9


function CreateTextServices(punkOuter:IUnknown;pITextHost:ITextHost;
var ppUnk:IUnknown):HResult; 

ITextHost编译不通过,应该uses哪个啊?

#1


我的目的是要捕捉住最后的一句话,而不受刷新等操作影响。谢谢了

#2


捕捉里加个判断呗,例如记录上一次捕捉的内容,相同则略过

#3


kankan

#4


引用 2 楼 funxu 的回复:
捕捉里加个判断呗,例如记录上一次捕捉的内容,相同则略过

好像没这么简单。

#5


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

#6


剩下的不好办了,只能把截取的内容通过内存映射或者消息发到你的主程序里,然后由外部程序撰写处理逻辑来过滤了

#7


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

#8


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


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

#9


function CreateTextServices(punkOuter:IUnknown;pITextHost:ITextHost;
var ppUnk:IUnknown):HResult; 

ITextHost编译不通过,应该uses哪个啊?