我可以告诉你我会做什么,但这不会很有趣......
假设文本大致均匀分布(它可能不在这样的两种语言之间,以及具有不同文本大小和宽度的两个窗口,在你开始工作之前真的要仔细考虑这一点),那么目标是强制两者滚动条相对于它们的整体处于相同的百分比。所以你需要做的是编写一个函数来确定每个滚动条的百分比。我会截屏两个窗口并裁剪出滚动条的重要部分,如下所示:
特别是向上和向下按钮,滚动手柄的顶部,滚动手柄的底部。将它们保存在自己的文件中。对两个窗口都这样做,以防它们绘制滚动条的方式略有不同。
现在是棘手的部分。编写一个执行以下操作的函数:图像搜索最右边 25 像素或指定窗口的顶部按钮。底部按钮也一样。手柄顶部也是如此。手柄底部也一样。使用它来确定您的窗口在哪里。
SetTitleMatchMode, 2 ; so it matches the end of the title
WinGetPos , X, Y, Width, Height, LibreOffice Writer ;exact substring of window name required
使用类似的方法来查找滚动条部分。
CoordMode, Pixel , Screen ;so image search searches entire screen
barwidth = 25 ; make sure it's more than the bar is wide.
ImageSearch, TopButtonX, TopButtonY, X+Width-barwidth , Y, X+Width, Y+Height, TopButton.bmp ; no jpg, fuzzy edges make searches fail
然后做一些数学运算,比如:
TopButtonY := TopButtonY+TopButtonImageHeight ; because we only care about the position of the bottom of the button.
BottomHandleY := BottomHandleY+BottomHandleImageHeight ; because we only care about where the bottom of the handle is.
HandleHeight := TopHandleY - BottomHandleY ; how tall the scroll handle is
TotalHeight := TopButtonY - BottomButtonY - HandleHeight ;how tall the scroll field is
HandleOffset := TopHandleY - TopButtonY ;how far it is from the top
HandlePercent := HandleOffset / TotalHeight ; the part we care about. return this value
通过这样的函数,您可以知道每个窗口的滚动程度。剩下的就是发送滚动命令。有几个选择。
; ControlSend , Control, Keys, LibreOffice Writer
ControlSend , Control, {Pgdown}, LibreOffice Writer ; or {Pgup}
ControlSend , Control, {WheelUp}, LibreOffice Writer ; or {wheeldown}
ControlSend , Control, {Up}, LibreOffice Writer ; or {down}
如果它允许您在窗口处于非活动状态时使用向上/向下箭头移动插入符号,这可能是最精确的选项,即使需要更长的时间。最快最精确的方法是也使用控制发送来模拟单击拖动。要使用 ControlSend,您需要弄清楚您正在处理哪个控件。 WindowSpy 可以帮助您。
所以首先:找到两个窗口的滚动位置。其次确定哪个窗口是活动的。第三,将非活动窗口推向正确的方向。重复直到它们在一定的公差范围内(否则它会无限地上下反弹)。
这一点我怎么强调都不为过,但在尝试此操作之前,请确保将滚动条置于大致相同的位置已经足够接近。如果不是,您将浪费大量时间来摆弄它。请记住,文本越长,它就越不准确。
如果可以选择,我肯定会考虑将两个窗口的内容复制到一个程序中,让您可以更多地访问控件(或者更好的专门用于此目的的程序)。如果您有更多的访问权限,您可以使用分节符来更精确地排列文本。
如果您真的只想并排查看两个文本(并且段落确实排成一行),您可以找到一个文本编辑器来告诉您如下信息:
如果 autohotkey 允许您阅读该信息的文本,您可以将 PDF 复制到 autohotkey 的内存中(以行分隔)并使用 autohotkey 在可编辑文档中移动时仅显示 PDF 的相应段落。
希望我说的对你有所帮助,祝你好运。