開いているすべての PDF ドキュメントを同時にスクロールするスクリプトを作成しようとしています。問題は、スクロールする必要がある各ウィンドウに具体的に名前を付けて、そのウィンドウにアクションを送信しないと、スクリプトが機能しないことです。また、現在の状態では、別のウィンドウ (例: メモ帳) でスクロール イベントをキャッチする必要がありますが、一部の PDF を手動でスクロールしてから同期スクロールを再開する場合もあるため、これは実際には問題ありません。
私のワークフローは次のとおりです:
- 2 つ以上の PDF ドキュメントを開きます。
- メモ帳ファイルを開き、メモ帳ファイル内をスクロールし始めます。
結果: 開いているすべての 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 を含むもの) とメモ帳が必要です。
使い方:
同期してスクロールする PDF を開きます。
メモ帳ウィンドウを 1 つ開きます (これはコントロール ウィンドウになるため、PDF を自律的に (それぞれ個別に) スクロールすることもできます)。メモ帳ウィンドウは、非常に小さくサイズを変更できます。
メモ帳ウィンドウをクリックして、スクロールします。
メモ帳ウィンドウでスクロールすると、各 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 を非常に素早く確認し、それらがほぼ同一であることを視覚的に確認し、違いを見つけることができました。
このアプローチでは、個々の Adobe ウィンドウをクリックしてドキュメントを個別にスクロールできるため、(1) 同期スクロールが 1 ページずれる場合がありましたが (おそらくキーを速く押しすぎたため)、この方法によって同期を取り戻すことができ、(2) 必ずしも同じページに並んでいない 2 つの異なる PDF から類似のセクションを選択して比較できるため、非常に便利です。
素晴らしい商品です、ありがとうございます!