Code: Select all
RegisterRawInputDevices(1, 2) ;Monitor Mouse devices
RegisterRawInputDevices(1, 6) ;Monitor Keyboard devices
SleepTime := "" ;1 or even 0 millisecond delay is enough to make "InputHandler()" don't return the input device info!
OnMessage(0xFF, "InputHandler")
gui, add, edit, w600 h200 vEditControl,
gui, show
return
guiclose: ;____________ gui close ____________
ExitApp
InputHandler(wParam, lParam) {
Global SleepTime
static RID_INPUT := 0x10000003
static RIDI_DEVICENAME := 0x20000007
if (SleepTime != "")
sleep, % SleepTime
Critical
DllCall("GetRawInputData"
, "Ptr", lParam
, "UInt", RID_INPUT
, "Ptr", 0
, "UIntP", size
, "UInt", 8 + A_PtrSize * 2)
VarSetCapacity(buffer, size)
DllCall("GetRawInputData"
, "Ptr", lParam
, "UInt", RID_INPUT
, "Ptr", &buffer
, "UIntP", size
, "UInt", 8 + A_PtrSize * 2)
devHandle := NumGet(buffer, 8)
vk := NumGet(buffer, 8 + 2 * A_PtrSize + 6, "UShort")
DllCall("GetRawInputDeviceInfo"
, "Ptr", devHandle
, "UInt", RIDI_DEVICENAME
, "Ptr", 0
, "UIntP", size)
VarSetCapacity(info, size)
DllCall("GetRawInputDeviceInfo"
, "Ptr", devHandle
, "UInt", RIDI_DEVICENAME
, "Ptr", &info
, "UIntP", size)
guicontrol, , EditControl, % "tick:`t" A_TickCount
. "`nname:`t" StrGet(&info)
. "`nvk:`t" vk
}
RegisterRawInputDevices(usagePage, usage) {
static RIDEV_INPUTSINK := 0x00000100
VarSetCapacity(rawDevice, 8 + A_PtrSize)
NumPut(usagePage, rawDevice, 0, "UShort")
NumPut(usage, rawDevice, 2, "UShort")
NumPut(RIDEV_INPUTSINK, rawDevice, 4, "UInt")
NumPut(A_ScriptHWND, rawDevice, 8, "UPtr")
if !DllCall("RegisterRawInputDevices"
, "Ptr", &rawDevice
, "UInt", 1
, "UInt", 8 + A_PtrSize)
{
throw "Fail"
}
}