I've taken a look a AHKHID for the first time, it was reasonably easy to get going, thanks to this example script:
AHK keyboard hook + AHKHID causing buggy behavior - AutoHotkey Community
https://autohotkey.com/boards/viewtopic ... 925#p87925
This is able to distinguish between my 2 keyboards, and it can handle whether shift is pressed or not. So this may be a good basis from which to proceed.
Code: Select all
;[AHKHID functions]
;GitHub - jleb/AHKHID: An AHK implementation of the HID functions
;https://github.com/jleb/AHKHID
#Include AHKHID.ahk
AHKHID_UseConstants()
AHKHID_Register(1, 6, A_ScriptHwnd, RIDEV_INPUTSINK)
OnMessage(0xFF, "InputMsg")
vList = ;continuation section
(` %
#',-./0123456789;=[\]`abcdefghijklmnopqrstuvwxyz
)
vListS = ;continuation section
(` %
~@<_>?)!"£$%^&*(:+{|}¬ABCDEFGHIJKLMNOPQRSTUVWXYZ
)
global oArray := {}
Loop, Parse, vList
oArray["" A_LoopField] := "" SubStr(vListS, A_Index, 1)
return
;==================================================
InputMsg(wParam, lParam)
{
local r, h
Critical
r := AHKHID_GetInputInfo(lParam, II_DEVTYPE)
if (r = RIM_TYPEKEYBOARD)
{
h := AHKHID_GetInputInfo(lParam, II_DEVHANDLE)
vOutput := ""
. "MakeCode: " (vSC := AHKHID_GetInputInfo(lParam, II_KBD_MAKECODE))
. "`r`n Flags: " AHKHID_GetInputInfo(lParam, II_KBD_FLAGS)
. "`r`n VKey: " (vVK := AHKHID_GetInputInfo(lParam, II_KBD_VKEY))
. "`r`n Message: " AHKHID_GetInputInfo(lParam, II_KBD_MSG)
. "`r`n ExtraInfo: " AHKHID_GetInputInfo(lParam, II_KBD_EXTRAINFO)
. "`r`n Name: " AHKHID_GetDevName(H, True)
vListMod := ""
GetKeyState("Shift", "P") ?? vListMod .= "S"
GetKeyState("Ctrl", "P") ?? vListMod .= "C"
(GetKeyState("LWin", "P") || GetKeyState("RWin", "P")) ?? vListMod .= "W"
GetKeyState("Alt", "P") ?? vListMod .= "A"
vKeyName1 := GetKeyName(Format("vk{:x}", vVK))
vKeyName2 := GetKeyName(Format("sc{:x}", vSC))
if GetKeyState("Shift", "P")
vKeyName := oArray["" vKeyName1]
else
vKeyName := vKeyName1
ToolTip, % vKeyName "`r`n" vListMod " " vKeyName1 " " vKeyName2 "`r`n" vOutput
return 0
}
}
;==================================================