我正在尝试编写一个脚本,用于同时滚动所有打开的 PDF 文档。问题是,除非我明确命名每个需要滚动的窗口并将操作发送给它,否则我无法让它工作。此外,在当前状态下,我需要在另一个窗口(例如记事本)中捕获滚动事件,但这实际上是可以的,因为我可能还想手动滚动一些 PDF,然后恢复同步滚动。
这是我的工作流程:
- 打开 2 个或更多 PDF 文档。
- 打开记事本文件并开始滚动到记事本文件中。
结果:所有打开的 PDF 开始滚动。
这是我的代码(借自 interwebz:)
WheelDown::
SetTitleMatchMode, 2
IfWinActive, Notepad ; Replace 'SafariTitle' by the title of the safari windows
{
CoordMode, Mouse, Screen
WinGet, active_id, ID, A
IfWinExist, Adobe
{
Send {WheelDown}
WinActivate ; Automatically uses the window found above.
Send {WheelDown}
Send {WheelDown}
WinActivate, ahk_id %active_id%
}
}
Else
{
Send {WheelDown}
}
return
WheelUp::
SetTitleMatchMode, 2
IfWinActive, Notepad ; Replace 'SafariTitle' by the title of the safari windows
{
CoordMode, Mouse, Screen
WinGet, active_id, ID, A
IfWinExist, Adobe
{
Send {WheelUp}
WinActivate ; Automatically uses the window found above.
Send {WheelUp}
Send {WheelUp}
WinActivate, ahk_id %active_id%
}
}
Else
{
Send {WheelUp}
}
return
目前它仅适用于滚动一个 PDF。
我怎样才能让它查看并滚动浏览所有这些内容?
答案1
找到了解决方案:
WheelDown::
SetTitleMatchMode, 2
IfWinActive, Notepad ;
{
CoordMode, Mouse, Screen
WinGet, active_id, ID, A
WinGet, id, list, Adobe,, Program Manager
Loop, %id%
{
Send {WheelDown}
this_id := id%A_Index%
WinActivate, ahk_id %this_id%
Send {WheelDown}
Send {WheelDown}
WinActivate, ahk_id %active_id%
}
}
Else
{
Send {WheelDown}
}
return
WheelUp::
SetTitleMatchMode, 2
IfWinActive, Notepad ;
{
CoordMode, Mouse, Screen
WinGet, active_id, ID, A
WinGet, id, list, Adobe,, Program Manager
Loop, %id%
{
Send {WheelUp}
this_id := id%A_Index%
WinActivate, ahk_id %this_id%
Send {WheelUp}
Send {WheelUp}
WinActivate, ahk_id %active_id%
}
}
Else
{
Send {WheelUp}
}
return
现在它起作用了。您需要 Adobe Acrobat Reader(或 acrobat Pro,带有 acrobat 的软件)和记事本。
怎么运行的:
打开您想要同步滚动的PDF。
打开一个记事本窗口(这将是控制窗口,因此您也可以自主滚动 PDF(每个单独)。记事本窗口可以调整到非常小。
单击记事本窗口并滚动。
当您在记事本窗口中滚动时,每个 PDF 都会被选中并滚动。如果您想单独滚动,请手动选择每个 PDF。
答案2
这是一个更简单的解决方案,不需要记事本窗口。您可能需要将窗口标题从“Adobe Reader”更改为 Acrobat 窗口的标题。这将循环遍历所有名为“Adobe Reader”的窗口,并按 CTRL-SHIFT-N 增加页码
SetTitleMatchMode 2 ; Match anything with Adobe Reader anywhere in the title
WinGet, id, list,Adobe Reader,, Program Manager
this_id := id1 ; Activate the first window, and find the current page number
WinActivate, ahk_id %this_id%
WinWaitActive, ahk_id %this_id%
Send, {CTRLDOWN}N{CTRLUP}
Sleep, 30
WinGetText, text ;
StringSplit, word_array, text, `n ; The current page number is on the 3rd line of returned text
nextpage := word_array3
nextpage += 1 ; Increment and store the current page number
Send, %nextpage%{ENTER}
Sleep, 30
Loop, %id% ; now loop through the rest of the windows and set each to the same page.
{
this_id := id%A_Index%
WinActivate, ahk_id %this_id%
WinWaitActive, ahk_id %this_id%
Send, {CTRLDOWN}N{CTRLUP}
Sleep, 30
Send, %nextpage%{ENTER}
Sleep, 30
}
答案3
只是想说一下,我尝试了 Brett Bymaster 2014 年 2 月 28 日的脚本并且它运行得非常好。
然后我做了修改,将“WheelDown”改为“PgDn”,将“WheelUp”改为“PgUp”——这样我就可以使用 PgUp 和 PgDn 键一次滚动一页,而不是使用鼠标滚轮一次滚动几行——这正是我想要的。我能够非常快速地浏览一对 PDF,并通过视觉验证它们几乎完全相同,并找出它们的不同之处。
这种方法提供的单击单个 Adobe 窗口即可分别滚动文档的功能非常棒,因为(1)我遇到过同步滚动偏离页面的情况(可能是按键太快:),而这使我能够使其重新同步,并且(2)您可以从两个不一定在同一页面上排列的不同 PDF 中选择相似的部分并进行比较。
好东西,谢谢!