AutoHotkey - Scrollen zwischen zwei PDF-Dokumenten

AutoHotkey - Scrollen zwischen zwei PDF-Dokumenten

Ich versuche, ein Skript zu erstellen, das alle geöffneten PDF-Dokumente gleichzeitig scrollt. Das Problem ist, dass ich es nicht zum Laufen bekomme, wenn ich nicht jedes Fenster, das gescrollt werden muss, konkret benenne und die Aktionen dorthin sende. Außerdem muss ich im aktuellen Zustand das Scroll-Ereignis in einem anderen Fenster abfangen (z. B. Notepad), aber das ist eigentlich in Ordnung, da ich möglicherweise auch einige der PDFs manuell scrollen und dann das synchrone Scrollen fortsetzen möchte.

Hier ist mein Arbeitsablauf:

  1. Öffnen Sie zwei oder mehr PDF-Dokumente.
  2. Öffnen Sie eine Notepad-Datei und beginnen Sie, in die Notepad-Datei hineinzuscrollen.

Ergebnis: Alle geöffneten PDFs beginnen zu scrollen.

Hier ist mein Code (aus dem Internet ausgeliehen :)

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

Derzeit funktioniert es nur zum Scrollen einer PDF-Datei.

Wie kann ich erreichen, dass sie alle angezeigt und durchgeblättert werden?

Antwort1

Lösung gefunden:

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

Jetzt funktioniert es. Sie benötigen Adobe Acrobat Reader (oder Acrobat Pro, etwas mit Acrobat) und Notepad.

Wie es funktioniert:

  1. Öffnen Sie die PDFs, die Sie synchron scrollen möchten.

  2. Öffnen Sie ein Notepad-Fenster (dies wird das Kontrollfenster sein, sodass Sie die PDFs auch einzeln (jeweils separat) durchblättern können). Die Größe des Notepad-Fensters kann sehr klein angepasst werden.

  3. Klicken Sie auf das Notizblockfenster und scrollen Sie weg.

Jede PDF-Datei wird ausgewählt und gescrollt, während Sie im Editorfenster scrollen. Wählen Sie jede PDF-Datei manuell aus, wenn Sie sie einzeln scrollen möchten.

Antwort2

Hier ist eine einfachere Lösung, die kein Notizblockfenster erfordert. Möglicherweise müssen Sie den Fenstertitel von „Adobe Reader“ in den Titel eines Acrobat-Fensters ändern. Dadurch werden alle Fenster mit dem Namen „Adobe Reader“ durchlaufen und STRG-UMSCHALT-N gedrückt, um die Seitenzahl zu erhöhen.

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

}

Antwort3

Ich wollte nur erwähnen, dass ich das Skript von Brett Bymaster vom 28. Februar 2014 ausprobiert habe und es perfekt funktioniert hat.

Dann habe ich eine Änderung vorgenommen und „WheelDown“ durchgängig in „PgDn“ und „WheelUp“ in „PgUp“ geändert. Dadurch kann ich die Tasten PgUp und PgDn verwenden, um eine Seite nach der anderen zu scrollen, anstatt das Mausrad zum Scrollen um mehrere Zeilen zu verwenden. Und genau das wollte ich. Ich konnte sehr schnell durch ein PDF-Paar blättern und visuell überprüfen, dass sie ziemlich identisch sind, und Unterschiede erkennen.

Die Möglichkeit, bei diesem Ansatz auf die einzelnen Adobe-Fenster zu klicken, um die Dokumente separat zu scrollen, ist großartig, weil (1) es bei mir in einigen Fällen zu Abweichungen beim synchronen Scrollen um eine Seite kamen (wahrscheinlich habe ich die Taste zu schnell gedrückt :) und ich so die Synchronisation wiederherstellen konnte, und (2) man ähnliche Abschnitte aus zwei unterschiedlichen PDF-Dateien auswählen und vergleichen kann, die nicht unbedingt auf derselben Seite stehen.

Gutes Zeug und Danke!

verwandte Informationen