AutoHotkey スレッド part10

このエントリーをはてなブックマークに追加
795名無しさん@お腹いっぱい。
複数マウスのボタン定義を変えてみる

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