1 (изменено: XYZ, 2011-03-20 05:34:41)

Тема: AHK: Вторая клавиатура, на какой из двух нажали кнопку?

Друзья, подскажите, есть ли возможность отловить нажатия со второй подключенной клавиатуры? Идея в том, что бы первая клавиатура работала обычным образом, а вторая перехватывалась, и отсылала различные макросы.

2

Re: AHK: Вторая клавиатура, на какой из двух нажали кнопку?

Не пробовал сразу две клавиатуры подключать, но по идее нажатия будут "отлавливаться" с обеих клавиатур. И AutoHotkey не узнает, с которой именно пришёл сигнал.
Двое человек за одним компьютером?

3 (изменено: XYZ, 2011-02-23 22:38:32)

Re: AHK: Вторая клавиатура, на какой из двух нажали кнопку?

не, это не multiseat, а именно расширение клавиатуры.
а идея возникла отсюда http://habrahabr.ru/company/onlinepro/blog/109183/ и http://habrahabr.ru/blogs/linux/112534/
http://www.microsoft.com/windows/multip … -more.aspx

4

Re: AHK: Вторая клавиатура, на какой из двух нажали кнопку?

XYZ, ссылки на форуме оформляются с помощью тега url, отредактируй своё сообщение.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5

Re: AHK: Вторая клавиатура, на какой из двух нажали кнопку?

То есть Вам недостаточно одной клавиатуры, и требуется увеличить количество клавиш?

6

Re: AHK: Вторая клавиатура, на какой из двух нажали кнопку?

Думаю возможно, изучите данную тему, можно подключить не только дополнительные клавиатуры, а в принципе любое HID устройство.

7

Re: AHK: Вторая клавиатура, на какой из двух нажали кнопку?

ypppu пишет:

То есть Вам недостаточно одной клавиатуры, и требуется увеличить количество клавиш?

да, именно. есть вариант с покупкой midi контроллера, но хочется обойтись малой кровью.

ayosh пишет:

Думаю возможно, изучите данную тему, можно подключить не только дополнительные клавиатуры, а в принципе любое HID устройство.

Спасибо, поковыряюсь. похоже - то, что нужно.

8 (изменено: XYZ, 2011-03-20 05:24:34)

Re: AHK: Вторая клавиатура, на какой из двух нажали кнопку?

нашлось время разобраться. да, AHKHID - это то, что нужно. спасибо.
отлавливать источник событий можно по этим свойствам:

AHKHID_GetDevName(AHKHID_GetInputInfo(lParam, II_DEVHANDLE), True)  ;имя устройства                    
AHKHID_GetDevInfo(AHKHID_GetInputInfo(lParam, II_DEVHANDLE), DI_HID_VENDORID, True) ;производитель

9 (изменено: Softoed, 2011-04-01 01:19:15)

Re: AHK: Вторая клавиатура, на какой из двух нажали кнопку?

Можно более развернутый пример кода? Когда, например, клавиша на второй клавиатуре запускает чё-нить. Когда у меня возникла такая-же задача я не придумал ничего "умнее", чем подключить второй старенький системник и сообщать нажатия по-сети при помощи проги MultiplicityPro. Хоть так до сих пор этим девайсом и пользуюсь, хочется более изящное решение.

Свой метод считаю крайне корявым, но его сильная сторона - возможность передачи комбинации клавиш. Получилось ли у Вас реализовать данную задачу(если таковая стояла конечно)?

10

Re: AHK: Вторая клавиатура, на какой из двух нажали кнопку?

Softoed, вот патченая функция из примера AHKHID Example 2.ahk , она даёт понять, как использовать эти фнкции.

InputMsg(wParam, lParam) {
    Local r, h
    Critical    ;Or otherwise you could get ERROR_INVALID_HANDLE
    
    ;Get device type
    r := AHKHID_GetInputInfo(lParam, II_DEVTYPE) 
    If (r = -1)
        OutputDebug %ErrorLevel%

; XYZ here    
    DeviceHandle := AHKHID_GetInputInfo(lParam, II_DEVHANDLE)
       

    If (r = RIM_TYPEMOUSE) {
        GuiControl,, lbxInput, % ""
; XYZ here    
;        . " HID Name: "     AHKHID_GetDevName(AHKHID_GetInputInfo(lParam, II_DEVHANDLE), True)
        . " HID info [ "
        . " HID Name: "      AHKHID_GetDevName(DeviceHandle, True)
        . " Vendor: "        AHKHID_GetDevInfo(DeviceHandle, DI_HID_VENDORID, True)     
        . " ProductId: "     AHKHID_GetDevInfo(DeviceHandle, DI_HID_PRODUCTID, True)    
        . " VersionNumber: " AHKHID_GetDevInfo(DeviceHandle, DI_HID_VERSIONNUMBER, True)
        . " UsagePage: "     AHKHID_GetDevInfo(DeviceHandle, DI_HID_USAGEPAGE, True)    
        . " Usage: "         AHKHID_GetDevInfo(DeviceHandle, DI_HID_USAGE, True)
        . " ] "
        
        . " Flags: "       AHKHID_GetInputInfo(lParam, II_MSE_FLAGS) 
        . " ButtonFlags: " AHKHID_GetInputInfo(lParam, II_MSE_BUTTONFLAGS) 
        . " ButtonData: "  AHKHID_GetInputInfo(lParam, II_MSE_BUTTONDATA) 
        . " RawButtons: "  AHKHID_GetInputInfo(lParam, II_MSE_RAWBUTTONS) 
        . " LastX: "       AHKHID_GetInputInfo(lParam, II_MSE_LASTX)
        . " LastY: "       AHKHID_GetInputInfo(lParam, II_MSE_LASTY) 
        . " ExtraInfo: "   AHKHID_GetInputInfo(lParam, II_MSE_EXTRAINFO)
    } Else If (r = RIM_TYPEKEYBOARD) {
    
        GuiControl,, lbxInput, % ""
; XYZ here    
;        . " HID Name: "     AHKHID_GetDevName(AHKHID_GetInputInfo(lParam, II_DEVHANDLE), True)
        . " HID info [ "
        . " HID Name: "      AHKHID_GetDevName(DeviceHandle, True)
        . " Vendor: "        AHKHID_GetDevInfo(DeviceHandle, DI_HID_VENDORID, True)     
        . " ProductId: "     AHKHID_GetDevInfo(DeviceHandle, DI_HID_PRODUCTID, True)    
        . " VersionNumber: " AHKHID_GetDevInfo(DeviceHandle, DI_HID_VERSIONNUMBER, True)
        . " UsagePage: "     AHKHID_GetDevInfo(DeviceHandle, DI_HID_USAGEPAGE, True)    
        . " Usage: "         AHKHID_GetDevInfo(DeviceHandle, DI_HID_USAGE, True)
        . " ] "
        
        
        . " MakeCode: "    AHKHID_GetInputInfo(lParam, II_KBD_MAKECODE)
        . " Flags: "       AHKHID_GetInputInfo(lParam, II_KBD_FLAGS)
        . " VKey: "        AHKHID_GetInputInfo(lParam, II_KBD_VKEY)
        . " Message: "     AHKHID_GetInputInfo(lParam, II_KBD_MSG) 
        . " ExtraInfo: "   AHKHID_GetInputInfo(lParam, II_KBD_EXTRAINFO)
    } Else If (r = RIM_TYPEHID) {
        h := AHKHID_GetInputInfo(lParam, II_DEVHANDLE)
        r := AHKHID_GetInputData(lParam, uData)
        GuiControl,, lbxInput, % ""
        . " Vendor ID: "   AHKHID_GetDevInfo(h, DI_HID_VENDORID,     True)
        . " Product ID: "  AHKHID_GetDevInfo(h, DI_HID_PRODUCTID,    True)
        . " UsPg/Us: " AHKHID_GetDevInfo(h, DI_HID_USAGEPAGE, True) . "/" . AHKHID_GetDevInfo(h, DI_HID_USAGE, True)
        . " Data: " Bin2Hex(&uData, r)
    }
    SendMessage, 0x018B, 0, 0,, ahk_id %hlbxInput%
    SendMessage, 0x0186, ErrorLevel - 1, 0,, ahk_id %hlbxInput%
}

честно говоря, до реализации моей идеи дело пока не дошло, я остановился на том, что разобрался с ahk и этой либой.

11

Re: AHK: Вторая клавиатура, на какой из двух нажали кнопку?

Спасибо. Попробую - отпишусь, что получилось.

12

Re: AHK: Вторая клавиатура, на какой из двух нажали кнопку?

Исследование подобной темы на форуме AutoHotkey показало, что на AHK реализация таких задач довольно трудоемка. Но зато добрые дядьки с этого форума советуют юзать связку AHK+HID macros. Скачал последний HID macros я здесь HID macros и очень обрадовался интуитивности этой прожки. Большинство моих задач она решила одна. Там графический интерфейс, позволяющий выбрать конкретное устройство и макрорекордер. Имеется свой скриптовый язык. Скрипрописательство пока не разбирал, но беглый осмотр хелпа не привел меня к почесыванию головы.

На форуме AHK советуют также другие проги: Quick Macros и GlovePIE, но они меня не так порадовали. Первая - ценой(40$)и запутанностью интерфейса, а вторая не захотела определять мои клавиатурки.

В общем для себя я изящное решение нашел, чего желаю и Вам.
Спасибо, XYZ, что затронули этот вопрос.

13

Re: AHK: Вторая клавиатура, на какой из двух нажали кнопку?

Softoed, ссылки оформляем тэгом «url». Я поправил Ваш пост.

14 (изменено: Softoed, 2011-04-03 05:00:35)

Re: AHK: Вторая клавиатура, на какой из двух нажали кнопку?

Напрасно я оболгал GlovePIE. Все устройства определяются отлично. Вот пример скрипта, превращающего на одной клаве space в левую кнопку мыши, а на другой клаве space в правую.

Mouse.LeftButton = Keyboard1.Space
Mouse.RightButton = Keyboard2.Space

По функционалу она гораздо богаче программы описанной мною ранее , но требует более глубокого изучения. Окончательно я не решил, но начинаю склоняться в сторону GlovePIE.

Скачать GlovePIE можно здесьGlovePIE_0.43


alexii, спасибо за замечание и исправление - ошибку учел.