Библиотека по ссылке не требует сознательно использовать DllCall, достаточно прочитать документацию по библиотеке и ознакомиться с примерами.
#NoEnv
SetBatchLines -1
OnMessage(0xFF, "InputHandler")
RegisterRawInputDevices(1, 2) ; 1, 2 — мышь
Esc::ExitApp
InputHandler(wParam, lParam) {
static RID_INPUT := 0x10000003
static RIDI_DEVICENAME := 0x20000007
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)
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)
; вместо Tooltip здесь могут производится действия специфичные для каждого устройства
ToolTip % "tick:`t" A_TickCount "`nname:`t" StrGet(&info)
}
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 "Failed to register for HID Device"
}
}