Я пытаюсь создать скрипт, который прокручивает все открытые PDF-документы одновременно. Проблема в том, что я не могу заставить его работать, пока я специально не назову каждое окно, которое нужно прокрутить, и не отправлю ему действия. Кроме того, в текущем состоянии мне нужно перехватить событие прокрутки в другом окне (например, Блокнот), но это на самом деле нормально, так как я также могу захотеть прокрутить некоторые PDF-файлы вручную, а затем возобновить синхронную прокрутку.
Вот мой рабочий процесс:
- Откройте 2 или более PDF-документов.
- Откройте файл Блокнота и начните прокручивать его содержимое.
Результат: все открытые PDF-файлы начинают прокручиваться.
Вот мой код (позаимствован из интернета :)
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) и Notepad.
Как это работает:
Откройте 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
Хочу только отметить, что я попробовал сценарий Бретта Баймастера от 28 февраля 2014 года, и он сработал идеально.
Затем я внес изменения, изменив "WheelDown" на "PgDn" и "WheelUp" на "PgUp" везде - это позволило мне использовать клавиши PgUp и PgDn для прокрутки страницы за раз, а не колесо мыши для прокрутки нескольких строк за раз - это именно то, что я искал. Я смог очень быстро пробежаться по паре PDF-файлов и визуально убедиться, что они практически идентичны, и заметить, где они различаются.
Возможность, которую предоставляет этот подход, нажимать на отдельные окна Adobe для прокрутки документов по отдельности, замечательна, потому что (1) у меня были случаи, когда синхронная прокрутка сбивалась на страницу (вероятно, я слишком быстро нажимал клавишу :), и это позволило мне восстановить синхронизацию, и (2) вы можете выбрать похожие разделы из двух разных PDF-файлов, которые не обязательно находятся на одной странице, и сравнить их.
Хорошая вещь и спасибо!