AutoHotkey - Rolagem de dois documentos PDF

5

Estou tentando criar um script que rola 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: Notepad), mas isso é realmente correto, pois talvez eu também queira rolar alguns PDFs manualmente e, em seguida, retomar a rolagem síncrona.

Este é o meu fluxo de trabalho:

  1. Abra 2 ou mais documentos PDF.
  2. Abra um arquivo do Bloco de Notas e comece a rolar para o arquivo do bloco de notas.

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

Aqui está 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, ele funciona para rolar apenas um PDF.

Como posso fazer com que olhe e percorra todos eles?

    
por Mircea M 31.10.2012 / 18:19

3 respostas

2

Encontrou 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 Bloco de Notas.

Como funciona:

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

  2. Abra uma janela do Bloco de Notas (essa será a janela de controle para que você também possa rolar os PDFs autonomamente (cada um separadamente). A janela do Bloco de Notas pode ser redimensionada muito pequena.

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

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

    
por 01.11.2012 / 17:01
2

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 do "Adobe Reader" para o título de uma janela acrobat. Isso percorre todas as janelas chamadas "Adobe Reader" e pressiona CTRL-SHIFT-N para incrementar 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

}
    
por 28.02.2014 / 23:07
0

Só queria mencionar que tentei o roteiro de Brett Bymaster em 28 de fevereiro de 2014 e funcionou perfeitamente.

Então eu fiz uma modificação, mudando "WheelDown" para "PgDn" e "WheelUp" para "PgUp" - isso me permite usar as teclas PgUp e PgDn para rolar uma página por vez, em vez da roda do mouse para rolar algumas linhas de cada vez - que é exatamente o que eu estava procurando. Eu consegui voar através de um par de PDFs muito rapidamente e visualmente verificar que eles são praticamente idênticos e identificar onde eles diferem.

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

Coisas boas e obrigado!

    
por 10.08.2015 / 21:38