AutoHotkey - Прокрутка двох документів PDF


5

Я намагаюся зробити сценарій, який прокручує всі відкриті документи 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-файлу.

Як я можу змусити їх переглянути та прокрутити всі?


Відповіді:


2

Знайшов рішення:

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) та Блокнот.

Як це працює:

  1. Відкрийте PDF-файли, які потрібно прокрутити синхронно.

  2. Відкрийте одне вікно Блокнот (це буде вікно керування, щоб ви також могли самостійно прокручувати PDF-файли (кожен окремо). Вікно Блокнота можна змінити за розміром дуже мало).

  3. Клацніть вікно «Блокнот» і прокрутіть геть.

Кожен PDF-файл вибирається та прокручується під час прокрутки у вікні Блокнот. Виберіть кожен PDF вручну, якщо ви хочете прокрутити його окремо.


Ви можете налаштувати це так, щоб воно могло працювати з будь-якою програмою? наприклад, ви можете мати ім'я window1 та window2 як вхід.
Джон Гра

2

Ось більш просте рішення, яке не вимагає вікна блокнота. Можливо, вам потрібно буде змінити назву вікна з "Adobe Reader" на те, що має назву вікно акробату. Цей цикл проходить через усі вікна під назвою "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

}

0

Просто хотів зазначити, що я спробував сценарій Brett Bymaster 28 лютого 2014 року, і він спрацював чудово.

Потім я вніс модифікацію, змінивши "WheelDown" на "PgDn" і "WheelUp" на "PgUp" протягом усього часу - це дозволить використовувати клавіші PgUp і PgDn для прокрутки сторінки за раз, а не колесо миші, щоб прокрутити кілька рядки за часом - саме це я шукав. Мені вдалося швидко пролетіти пару PDF-файлів і візуально переконатися, що вони майже однакові, і місце, де вони відрізняються.

Можливість такого підходу передбачає клацання окремих вікон Adobe для прокручування документів окремо, чудово, тому що (1) У мене були випадки, коли синхронізація прокручувалась сторінкою (ймовірно, натискаючи клавішу занадто швидко :), і це дозволило мені щоб повернути його синхронізовано, і (2) ви можете вибрати подібні розділи з двох різних PDF-файлів, які не обов'язково вишикуються на одній сторінці та порівняти їх.

Гарні речі та спасибі!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.