Скину свой конспект на случай если кто-то столкнется с этой же проблемой и найдёт этот тред.
Возможен бинд именно физических клавиш. Вроде также можно программировать удаленные устройства типа пультов от ТВ.
По ссылке все расписано норм (лучше сначала всю страницу прочитать), но там на англ язе и не наглядно (картинки в треде удалились):
https://www.autohotkey.com/board/topic/38015-ahkhid-an-ahk-implementation-%20of-the-hid-functions/
1. запустить example 1
2. открыть вкладку Other
3. заскринить значения
4. отключить клаву
5. посмотреть изменившиеся значения = это значения нужной клавиатуры. Vendor ID Product ID Version Number Usage Page Usage
у меня выдавало 2 строки, но в конце заработали значения только из одной строки.
6. запустить example 2
7. вставить Usage Page and Usage в соответствующие поля.
8. нажать Add, call. аргументы вроде не нужны
9. прокликать физические клавиши - должны работать
10. вставить в код свои значения (из example 1)
Code: Select all
#Include %A_ScriptDir%\AHKHID.ahk
#Include AHKHID.ahk
;Create GUI to receive messages
Gui, +LastFound
Gui_ForHandleArgument := WinExist()
;Intercept WM_INPUT messages
WM_INPUT := 0xFF
OnMessage(WM_INPUT, "InputMsg")
UsagePageVersion1 := AHKHID_Register(ВАШ_UsagePage, ВАШ_Usage, Gui_ForHandleArgument, RIDEV_INPUTSINK)
Return
InputMsg(wParam, lParam) {
Local devh, iKey, sLabel
Critical
;Get handle of device
devh := AHKHID_GetInputInfo(lParam, II_DEVHANDLE)
If (AHKHID_GetDevInfo(devh, DI_DEVTYPE, True) = RIM_TYPEHID)
And (AHKHID_GetDevInfo(devh, DI_HID_VENDORID, True) = 2522) ;вставить ваш VENDORID
And (AHKHID_GetDevInfo(devh, DI_HID_PRODUCTID, True) = 37056) ;вставить ваш PRODUCTID
And (AHKHID_GetDevInfo(devh, DI_HID_VERSIONNUMBER, True) = 280) ;вставить ваш VERSIONNUMBE
;Get data
AHKHID_GetInputData(lParam, uData)
iKey := NumGet(uData, 0, "UInt")
sLabel := "RC_" . iKey
;изначально для получения кодов предлагаю:
Send, %iKey%_ ; <- при нажатии на физич клавишу она напечатает свой код.
;когда выпишите все коды - замените это строку выше на:
if IsLabel(sLabel)
Gosub, %sLabel%
; и нужно дописать функцию-процедуру, которая выполнится по коду. название RC_+ваш код
}
}
RC_539344388:
MsgBox, work ; здесь ваша логика для выполнения по нажатию клавиши
Return
11. изначально для получения кодов предлагаю вытянуть их так
Send, %iKey%_ ; <- при нажатии на физич клавишу она напечатает свой код.
12. дописать код вызова процедуры при клике
Code: Select all
if IsLabel(sLabel)
Gosub, %sLabel%
Коды g клавиш для клавиатуры X7 g800V:
1 19250692
2 36027908
3 69582340
4 136691204
5 270908932
6 539344388
7 1076215300
Пункты 6-9 вроде можно пропустить? Там выдаются длинные коды (еще одни. из 19 символов), но что с ними делать не знаю.
g10 нажать = 04BE254000200000080
6 нулей после 2
g10 отпустить = 04BE250000000000080
В ecample 2 работают все клавиши. Но вот в пункте 11 на клавиши g9-g16 код общий, т.е. использовать их не удастся.
- image.png (42.05 KiB) Viewed 3353 times
Скину свой конспект на случай если кто-то столкнется с этой же проблемой и найдёт этот тред.
Возможен бинд именно физических клавиш. Вроде также можно программировать удаленные устройства типа пультов от ТВ.
По ссылке все расписано норм (лучше сначала всю страницу прочитать), но там на англ язе и не наглядно (картинки в треде удалились): https://www.autohotkey.com/board/topic/38015-ahkhid-an-ahk-implementation-%20of-the-hid-functions/
1. запустить example 1
2. открыть вкладку Other
3. заскринить значения
4. отключить клаву
5. посмотреть изменившиеся значения = это значения нужной клавиатуры. Vendor ID Product ID Version Number Usage Page Usage
у меня выдавало 2 строки, но в конце заработали значения только из одной строки.
6. запустить example 2
7. вставить Usage Page and Usage в соответствующие поля.
8. нажать Add, call. аргументы вроде не нужны
9. прокликать физические клавиши - должны работать
10. вставить в код свои значения (из example 1)
[code]
#Include %A_ScriptDir%\AHKHID.ahk
#Include AHKHID.ahk
;Create GUI to receive messages
Gui, +LastFound
Gui_ForHandleArgument := WinExist()
;Intercept WM_INPUT messages
WM_INPUT := 0xFF
OnMessage(WM_INPUT, "InputMsg")
UsagePageVersion1 := AHKHID_Register(ВАШ_UsagePage, ВАШ_Usage, Gui_ForHandleArgument, RIDEV_INPUTSINK)
Return
InputMsg(wParam, lParam) {
Local devh, iKey, sLabel
Critical
;Get handle of device
devh := AHKHID_GetInputInfo(lParam, II_DEVHANDLE)
If (AHKHID_GetDevInfo(devh, DI_DEVTYPE, True) = RIM_TYPEHID)
And (AHKHID_GetDevInfo(devh, DI_HID_VENDORID, True) = 2522) ;вставить ваш VENDORID
And (AHKHID_GetDevInfo(devh, DI_HID_PRODUCTID, True) = 37056) ;вставить ваш PRODUCTID
And (AHKHID_GetDevInfo(devh, DI_HID_VERSIONNUMBER, True) = 280) ;вставить ваш VERSIONNUMBE
;Get data
AHKHID_GetInputData(lParam, uData)
iKey := NumGet(uData, 0, "UInt")
sLabel := "RC_" . iKey
;изначально для получения кодов предлагаю:
Send, %iKey%_ ; <- при нажатии на физич клавишу она напечатает свой код.
;когда выпишите все коды - замените это строку выше на:
if IsLabel(sLabel)
Gosub, %sLabel%
; и нужно дописать функцию-процедуру, которая выполнится по коду. название RC_+ваш код
}
}
RC_539344388:
MsgBox, work ; здесь ваша логика для выполнения по нажатию клавиши
Return[/code]
11. изначально для получения кодов предлагаю вытянуть их так
Send, %iKey%_ ; <- при нажатии на физич клавишу она напечатает свой код.
12. дописать код вызова процедуры при клике
[code]if IsLabel(sLabel)
Gosub, %sLabel%[/code]
Коды g клавиш для клавиатуры X7 g800V:
1 19250692
2 36027908
3 69582340
4 136691204
5 270908932
6 539344388
7 1076215300
Пункты 6-9 вроде можно пропустить? Там выдаются длинные коды (еще одни. из 19 символов), но что с ними делать не знаю.
g10 нажать = 04BE254000200000080
6 нулей после 2
g10 отпустить = 04BE250000000000080
В ecample 2 работают все клавиши. Но вот в пункте 11 на клавиши g9-g16 код общий, т.е. использовать их не удастся. [attachment=0]image.png[/attachment]