Open5
ブラウザでPDFを閲覧しているときにhjklキーでスクロール/ページ遷移する方法 [Windows, Edge, AutoHotkey]

AutoHotkey v2を使う
Microsoft Edge以外の場合は都度exeファイル名を変更してください
2025/01/19修正版 2
1回だけDown
を送るのではなくキーを押している間は連続的に送るようにすると滑らかにスクロールすることができます
pdf_move_with_hjkl.ahk
if WinActive("ahk_exe msedge.exe") && InStr(WinGetTitle("A"), ".pdf") {
Space & h::Left
Space & j:: {
while GetKeyState("j", "P") {
Send "{Down}"
Sleep 10
}
}
Space & k:: {
while GetKeyState("k", "P") {
Send "{Up}"
Sleep 10
}
}
Space & l::Right
Space:: Send " "
}
[参考] 2025/01/19修正版
PDFを開きながらブラウザのサイドバーで別のアプリを起動する場合、そちらにもAutoHotkeyが適用されてしまうので<Space>+hjkl
に変更しました
pdf_move_with_hjkl.ahk
if WinActive("ahk_exe msedge.exe") && InStr(WinGetTitle("A"), ".pdf") {
Space & h::Left
Space & j::Down
Space & k::Up
Space & l::Right
Space:: Send " "
}
[参考] 修正前
pdf_move_with_hjkl.ahk
if WinActive("ahk_exe msedge.exe") && InStr(WinGetTitle("A"), ".pdf") {
h::Left
j::Down
k::Up
l::Right
}
これを任意の場所に置いてエクスプローラーからダブルクリックで実行するとブラウザでPDFを閲覧しているときのみキーのリマップが行われる

ブラウザ拡張では無理か?
詳しく調べてない
PDF Viewer for Vimium Cという拡張機能があり、PDFビューアをブラウザのデフォルトのやつからPDF.jsに変更されるというデメリットと引き換えにhjklで移動できる
デフォルトのビューアを使うならブラウザの外側から直接リマップするしかなさそう

PC起動時に自動で実行する
AutoHotKeyを起動時に自動で立ち上げる #Windows - Qiitaを参考にahkファイルのショートカットファイル(hoge.ahk.lnk
)を作成しスタートアップフォルダに置く

PDFに限らずブラウザの機能でSpaceで1画面分次に、Shift+Spaceで1画面分前にスクロールできるので、PDFの高さをブラウザに調節してたらそっちの方が便利かも
AutoHotkeyのやつはSpaceを押しっぱなしにしておくとバグって止まらなくなったりする

話してもスクロールが止まらなくなるのはSendEventにしたら治る?
#Requires AutoHotkey v2.0
#SingleInstance Force
SetKeyDelay -1
SendWhile(key, message) {
SendEvent message
Sleep 20
i := 0
while GetKeyState(key, "P") {
SendEvent message
Sleep 20
OutputDebug "Loop " GetKeyState(key, "P") GetKeyState("Space", "P") GetKeyState(key)
i++
if (i > 10000) {
OutputDebug "Infinite loop detected, breaking out."
break
}
}
OutputDebug "End " GetKeyState(key, "P") GetKeyState("Space", "P")
OutputDebug ""
}
Space:: Send "{Space}"
+Space::+Space
^Space::^Space
!Space::!Space
Space & h:: SendWhile("h", "{Left}")
Space & j:: SendWhile("j", "{Down}")
Space & k:: SendWhile("k", "{Up}")
Space & l:: SendWhile("l", "{Right}")