AutoHotkey — прокрутка двух PDF-документов

AutoHotkey — прокрутка двух PDF-документов

Я пытаюсь создать скрипт, который прокручивает все открытые PDF-документы одновременно. Проблема в том, что я не могу заставить его работать, пока я специально не назову каждое окно, которое нужно прокрутить, и не отправлю ему действия. Кроме того, в текущем состоянии мне нужно перехватить событие прокрутки в другом окне (например, Блокнот), но это на самом деле нормально, так как я также могу захотеть прокрутить некоторые PDF-файлы вручную, а затем возобновить синхронную прокрутку.

Вот мой рабочий процесс:

  1. Откройте 2 или более PDF-документов.
  2. Откройте файл Блокнота и начните прокручивать его содержимое.

Результат: все открытые 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.

Как это работает:

  1. Откройте PDF-файлы, которые вы хотите прокручивать синхронно.

  2. Откройте одно окно Блокнота (это будет окно управления, чтобы вы могли прокручивать PDF-файлы автономно (каждый по отдельности). Размер окна Блокнота можно изменить до очень маленького размера.

  3. Щелкните окно Блокнота и прокрутите страницу.

Каждый 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-файлов, которые не обязательно находятся на одной странице, и сравнить их.

Хорошая вещь и спасибо!

Связанный контент