複数マウスのボタン定義を変えてみる
RegisterRawInputDevices で直接入力拾うとホットキーより先に処理が始まるみたいなんで、
デバイスIDをグローバル変数に定義してやる方法で出来た。
AHKL の #If で思ったよりあっさりと定義できる、本家でも If 分岐でイケる。
ただデバイスIDを予め取っておかないといけないし、抜き差ししたりするとId変わるので面倒だ。
#NoEnv
DetectHiddenWindows, On
OnMessage(0xFF, "WM_INPUT"), VarSetCapacity(dev, 12, 0), NumPut(1, dev, 0, "UShort"), NumPut(2, dev, 2, "UShort"), NumPut(0x100, dev, 4) ; UsagePage / Usage / dwFlags = RIDEV_INPUTSINK
Process, Exist
NumPut(WinExist("ahk_class AutoHotkey ahk_pid " ErrorLevel), dev, 8)
DllCall("RegisterRawInputDevices", "Ptr", &dev, "UInt", 1, "UInt", VarSetCapacity(dev))
Return
WM_INPUT(wParam, lParam) {
global deviceId
Critical
DllCall("GetRawInputData", "UInt", lParam, "UInt", 0x10000003, "UInt", 0, "UIntP", size, "UInt", 16)
VarSetCapacity(raw, size, 0)
DllCall("GetRawInputData", "UInt", lParam, "UInt", 0x10000003, "Ptr", &raw, "UIntP", size, "UInt", 16, "Int")
SetFormat, IntegerFast, h
deviceId := (NumGet(raw, 0, "Int") == 0) && NumGet(raw, 20, "UShort") > 0 ? NumGet(raw, 8) : 0
}
#If (deviceId = XXXXX) ; デバイスIDを指定
MButton::
; 何か〜
Return