我截取一个进程的屏幕输出,为了滤掉屏幕刷新时的重复输出,考虑这样:
将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,就能知道这次输出仍然是文档中的第三行,已保存,就可以怱略它,从而得到正确的结果。
将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,就能知道这次输出仍然是文档中的第三行,已保存,就可以怱略它,从而得到正确的结果。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货