AutoHotkey - Scorrimento di due documenti PDF


5

Sto cercando di creare uno script che faccia scorrere tutti i documenti PDF aperti contemporaneamente. Il problema è che non riesco a farlo funzionare a meno che non specifichi il nome di ogni finestra che deve essere scrollata e invii le azioni ad essa. Inoltre, nello stato attuale ho bisogno di catturare l'evento scroll in un'altra finestra (es: Notepad) ma questo è effettivamente ok visto che potrei anche voler scorrere manualmente alcuni dei PDF e quindi riprendere lo scrolling sincrono.

Ecco il mio flusso di lavoro:

  1. Apri 2 o più documenti PDF.
  2. Apri un file di Blocco note e inizia a scorrere nel file del blocco note.

Risultato: tutti i PDF aperti iniziano a scorrere.

Ecco il mio codice (preso in prestito da interwebz :)

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

In questo momento funziona per lo scorrimento di un solo PDF.

Come posso vederlo e scorrere tutti?


Risposte:


2

Trovato la soluzione:

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

Ora funziona. È necessario Adobe Acrobat Reader (o acrobat Pro, qualcosa con acrobat) e Blocco note.

Come funziona:

  1. Aprire i PDF che si desidera scorrere in modo sincrono.

  2. Apri una finestra del Blocco note (questa sarà la finestra di controllo in modo da poter scorrere i PDF autonomamente (ciascuno separatamente) .La finestra del Blocco note può essere ridimensionata in modo molto piccolo.

  3. Fai clic sulla finestra del Blocco note e scorri.

Ogni PDF viene selezionato e scostato mentre scorri nella finestra del Blocco note. Seleziona manualmente ciascun PDF se desideri scorrerlo da solo.


potresti personalizzare questo in modo che possa funzionare con qualsiasi programma? ad esempio, potresti avere come input il nome di window1 e window2.
Jon Grah

2

Ecco una soluzione più semplice che non richiede una finestra del blocco note. Potrebbe essere necessario cambiare il titolo della finestra da "Adobe Reader" a una finestra di acrobat. Questo scorre attraverso tutte le finestre chiamate "Adobe Reader", e colpisce CTRL-SHIFT-N per incrementare il numero di pagina

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

Volevo solo dire che ho provato la sceneggiatura di Brett Bymaster del 28 febbraio 2014 e ha funzionato perfettamente.

Poi ho apportato una modifica, cambiando "WheelDown" a "PgDn" e "WheelUp" a "PgUp" in tutto - questo mi permette di usare i tasti PgUp e PgDn per scorrere una pagina alla volta, piuttosto che la rotella del mouse per scorrere alcuni linee alla volta - che è esattamente quello che stavo cercando. Sono stato in grado di esaminare un paio di PDF molto velocemente e verificare visivamente che fossero praticamente identici e individuare dove differivano.

L'abilità con cui questo approccio consente di fare clic sulle singole finestre di Adobe per scorrere i documenti separatamente è ottima, perché (1) ho avuto alcuni casi in cui lo scorrimento della sincronizzazione è sceso da una pagina (probabilmente spingendo la chiave troppo velocemente :) e questo mi ha permesso per ripristinarlo in sincronia e (2) puoi selezionare sezioni simili da 2 diversi PDF che non si allineano necessariamente sulla stessa pagina e li confrontano.

Roba buona e grazie!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.