👨🦽
AutoHotKey,X-Mouse Button Controlを使った個人的ベストなリマップのメモ
はじめに
- ほぼ自分用
- 個人的に便利なスクリプトを記録する
- 必要なもの
- サイドボタンのあるマウス
- AutoHotKey
- X-Mouse Button Control
- WindowsPC
AutoHotKeyとは
- マウスやキーボードのリマップができたり
- プログラムの実行など
- 独自のスクリプト言語があり、マウスやキー操作をトリガーにしていろんなことができる便利ツール
- 詳しくは以下記事などを参考に
X-Mouse Button Controlとは
- AutoHotKeyよりは単純
- GUIでマウスのキー割当を変更できたりする便利ツール
- 多分AutoHotKeyで全て置き換えることができると思う
- ただ視覚的に分かりやすいので、単純な割当はこっちでやりたい派
My お気に入り設定
1️⃣ ahk
パーツごとに分けて書く
ヘッダー部分
(v1とv2があるらしく、私は最新のv2を使ってる。)
#Requires AutoHotkey v2.0
#SingleInstance Force
IME変換ショートカット無効化
間違って押してしまうので、私にはいらなかった
;Windows+Space(言語切り替え)無効化
#Space::Return
vb6.exe
VB6エディタを使う場合にShift+ホイールで横スクロールをさせたかった
AIに書いてもらって実現
コード
#HotIf WinActive("ahk_exe VB6.EXE")
+WheelDown::VB6_HScroll(+2) ; 右
+WheelUp::VB6_HScroll(-2) ; 左
VB6_HScroll(step) {
editHwnd := ControlGetFocus("A")
if !editHwnd
return
sbHwnd := FindAnyHScrollBar(WinGetID("A"))
if !sbHwnd
return
pos := SendMessage(0xE1, 0, 0, sbHwnd) ; SBM_GETPOS
newPos := pos + step
if (newPos < 0)
newPos := 0
hi := newPos & 0xFFFF ; HIWORDを16bitに固定(ワープ防止の肝)
low := 5 ; SB_THUMBTRACK(4にすると環境によっては反応が変わる)
wParam := (hi << 16) | low
PostMessage 0x114, wParam, sbHwnd, editHwnd ; WM_HSCROLL
}
FindAnyHScrollBar(rootHwnd) {
found := 0
cb := CallbackCreate((hwnd, lParam) => (
found ? false : (
WinGetClass("ahk_id " hwnd) = "ScrollBar"
? (
style := DllCall("GetWindowLongPtr", "ptr", hwnd, "int", -16, "ptr"),
!(style & 0x1) ? (found := hwnd, false) : true ; SBS_VERTじゃない=横
)
: true
)
), "Fast")
DllCall("EnumChildWindows", "ptr", rootHwnd, "ptr", cb, "ptr", 0)
CallbackFree(cb)
return found
}
#HotIf
何やってるかはあまり把握してない笑
(Windows API(SendMessageなど)を使用して、コントロールに対して直接スクロールメッセージを送っているようです)
AnyDesk
リモート端末へ接続した際に「半角/全角」切り替えをする場合に
ローカル側が切り替わらないように
#HotIf WinActive("ahk_exe AnyDesk.exe")
$sc029::
{
; ローカルのIMEには「キーが押された」こと自体を隠蔽し、
; AnyDeskのウィンドウに対して直接、スキャンコードを送信する
ControlSend "{sc029}",, "A"
return
}
#HotIf
DBeaver
Ctrl + + (拡大)
と
Ctrl + -(縮小)
をShift+ホイールで実現させたかった
; DBeaverがアクティブな時のみ有効にする設定
#HotIf WinActive("ahk_exe dbeaver.exe")
^WheelUp::Send "^{+}"
^WheelDown::Send "^{-}"
#HotIf
Excel
Shift + ホイール でも横スクロール可能にする
; Excelがアクティブな時だけ有効にする
#HotIf WinActive("ahk_exe EXCEL.EXE") and !GetKeyState("Ctrl")
; Shift + ホイール上 (左スクロール)
+WheelUp::
{
try {
; COM操作で直接スクロール (誤爆防止・確実)
; SmallScroll(Down, Up, ToRight, ToLeft)
; 最後の数字「1」がスクロール量です (1~5でお好みに調整可)
ComObjActive("Excel.Application").ActiveWindow.SmallScroll(0, 0, 0, 1)
} catch {
; エラー時(セル編集中などCOMが使えない時)は通常のキー送信に逃げる
Send("{Blind}^{WheelUp}")
}
}
; Shift + ホイール下 (右スクロール)
+WheelDown::
{
try {
; SmallScroll(Down, Up, ToRight, ToLeft)
; 3番目の数字「1」がスクロール量です
ComObjActive("Excel.Application").ActiveWindow.SmallScroll(0, 0, 1, 0)
} catch {
Send("{Blind}^{WheelDown}")
}
}
2️⃣ X-Mouse Button Control
デフォルト
サイドボタン5にEnterキー
サイドボタン4はちょっと特殊
- 単押しは「戻る」
- 長押し(150ms経過後)は「Shift長押し」
- キーに手を置かずにマウスだけで横スクロールがしたいとき用

excel
デフォルトと同じ理由で横スクロールを可能にするために工夫している
(AutoHotKey側と整合させる為にSHIFT+CTRLにしてる)

Discussion