AutoHotkey - 2 つの PDF ドキュメントをスクロールする

AutoHotkey - 2 つの PDF ドキュメントをスクロールする

開いているすべての 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

現時点では、1 つの PDF のみをスクロールできます。

これらすべてを表示してスクロールするにはどうすればいいでしょうか?

答え1

解決策を見つけました:

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. メモ帳ウィンドウを 1 つ開きます (これはコントロール ウィンドウになるため、PDF を自律的に (それぞれ個別に) スクロールすることもできます)。メモ帳ウィンドウは、非常に小さくサイズを変更できます。

  3. メモ帳ウィンドウをクリックして、スクロールします。

メモ帳ウィンドウでスクロールすると、各 PDF が選択されてスクロールされます。個別にスクロールしたい場合は、各 PDF を手動で選択してください。

答え2

メモ帳ウィンドウを必要としない、より簡単な解決策があります。ウィンドウのタイトルを「Adobe Reader」から Acrobat ウィンドウのタイトルに変更する必要があるかもしれません。これは「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

}

答え3

2014 年 2 月 28 日の Brett Bymaster のスクリプトを試してみたところ、完璧に動作したことをお伝えしたいと思います。

次に、全体的に「WheelDown」を「PgDn」に、「WheelUp」を「PgUp」に変更する修正を加えました。これにより、マウス ホイールで一度に数行スクロールするのではなく、PgUp キーと PgDn キーを使用して一度に 1 ページスクロールできるようになりました。これはまさに私が求めていたことです。2 つの PDF を非常に素早く確認し、それらがほぼ同一であることを視覚的に確認し、違いを見つけることができました。

このアプローチでは、個々の Adob​​e ウィンドウをクリックしてドキュメントを個別にスクロールできるため、(1) 同期スクロールが 1 ページずれる場合がありましたが (おそらくキーを速く押しすぎたため)、この方法によって同期を取り戻すことができ、(2) 必ずしも同じページに並んでいない 2 つの異なる PDF から類似のセクションを選択して比較できるため、非常に便利です。

素晴らしい商品です、ありがとうございます!

関連情報