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.

Как я могу заставить это смотреть и просматривать все из них?

3 ответа3

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 вручную, если вы хотите прокрутить его отдельно.

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .