AutoHotkey - Rolando dois documentos PDF

AutoHotkey - Rolando dois documentos PDF

Estou tentando criar um script que role todos os documentos PDF abertos ao mesmo tempo. O problema é que não consigo fazê-lo funcionar a menos que eu nomeie especificamente cada janela que precisa ser rolada e envie as ações para ela. Além disso, no estado atual, preciso capturar o evento de rolagem em outra janela (ex: Bloco de Notas), mas na verdade está tudo bem, pois também posso querer rolar alguns dos PDFs manualmente e depois retomar a rolagem síncrona.

Aqui está meu fluxo de trabalho:

  1. Abra 2 ou mais documentos PDF.
  2. Abra um arquivo do Bloco de Notas e comece a rolar até ele.

Resultado: todos os PDFs abertos começam a rolar.

Aqui está o meu código (emprestado do 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

No momento, funciona para rolar apenas um PDF.

Como posso fazer com que ele veja e percorra todos eles?

Responder1

Encontrei a solução:

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

Agora funciona. Você precisa do Adobe Acrobat Reader (ou acrobat Pro, algo com acrobat) e do Notepad.

Como funciona:

  1. Abra os PDFs que deseja rolar de forma síncrona.

  2. Abra uma janela do Bloco de notas (esta será a janela de controle para que você também possa rolar os PDFs de forma autônoma (cada um separadamente). A janela do Bloco de notas pode ser redimensionada para um tamanho bem pequeno.

  3. Clique na janela do Bloco de Notas e role para longe.

Cada PDF é selecionado e rolado conforme você rola na janela do Bloco de Notas. Selecione cada PDF manualmente se quiser rolar sozinho.

Responder2

Aqui está uma solução mais simples que não requer uma janela do bloco de notas. Talvez seja necessário alterar o título da janela de "Adobe Reader" para o título de uma janela do Acrobat. Isso percorre todas as janelas chamadas "Adobe Reader" e pressiona CTRL-SHIFT-N para aumentar o número da página

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

}

Responder3

Só queria mencionar que experimentei o script Brett Bymaster de 28 de fevereiro de 2014 e funcionou perfeitamente.

Então fiz uma modificação, alterando "WheelDown" para "PgDn" e "WheelUp" para "PgUp" - isso me permitiu usar as teclas PgUp e PgDn para rolar uma página por vez, em vez da roda do mouse para rolar algumas. linhas por vez - exatamente o que eu estava procurando. Consegui percorrer um par de PDFs muito rapidamente e verificar visualmente se eles eram praticamente idênticos e identificar onde diferiam.

A capacidade que essa abordagem oferece de clicar nas janelas individuais da Adobe para rolar os documentos separadamente é ótima, porque (1) tive alguns casos em que a rolagem de sincronização falhou em uma página (provavelmente pressionando a tecla muito rápido :) e isso me permitiu para sincronizá-lo novamente e (2) você pode selecionar seções semelhantes de 2 PDFs diferentes que não estão necessariamente alinhados na mesma página e compará-los.

Bom material e obrigado!

informação relacionada