我截取一个进程的屏幕输出,为了滤掉屏幕刷新时的重复输出,考虑这样:
将TextOut函数中的参数X,Y转换成为文档坐标,这样每截到一次输出,将与已保存的坐标相比较,如果已存在,则说明只是重复刷新,否则说明屏幕上输出了新的数据,应该截下来。但是我不知道如何由TextOut函数参数中的X\Y转换回去,特向高手求救。比如我截取一屏,其输出文本和输出位置在无刷新的情况下分别是:
X:4 Y:4 FUNC:ExtTextOutA输出:[boot loader]
X:4 Y:18 FUNC:ExtTextOutA输出:timeout=0
X:4 Y:32 FUNC:ExtTextOutA输出:multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows 2000 Professional" /fastdetect /noguiboo /noguiboo那么当拖动滚动条(垂直)时,可能输出为:
X:4 Y:48 FUNC:ExtTextOutA输出:[boot loader]
X:4 Y:60 FUNC:ExtTextOutA输出:timeout=0
X:4 Y:74 FUNC:ExtTextOutA输出:multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows 2000 Professional" /fastdetect /noguiboo /noguiboo前后两次混在一起,形成共六次输出,但实际只有三次是有效的。如果我能由X:4,Y:74的坐标恢复到X:4,Y:32,就能知道这次输出仍然是文档中的第三行,已保存,就可以怱略它,从而得到正确的结果。

解决方案 »

  1.   

    谢谢bluebohe,不过你说的办法也不容易实现。我是截获的ExtTextOut函数,此时它已经输出过来了,如果怱略这次,先来一个SetScrollInfo,再重发一个WM_PAINT消息,那么可能数据量太大,因为客户要求实时(不是我们通常意义上的实时,实际是及时)得到最新测量的数据(这个数据会及时刷新在屏幕上),所以用定时器不太好做,除此之外,如果有WM_SIZE消息,可能定位会更难。我已决定使用别的方法了。这个贴子留5天,和高手一起讨论,看能不能做出一个通用的截屏软件出来。