1 (изменено: Next, 2013-05-19 01:09:45)

Тема: AHK: Повлиять на отдельно взятое устройство.

Купил вот такое чудо техники: http://www.a-mouse.com/proddetails.asp?id=72
  Собственного драйвера  для этого устройства нет.  Со стандартным драйвером, шарик трекбола, при вращении вверх, ведёт курсор вниз.   

Есть программы, которые могут "перевернуть" движение по любой из осей. Но тогда наоборот начинает действовать стандартная мышь.  Можно ли средствами AHK отслеживать обращение к драйверу одного конкретного устройства и менять направление движения курсора только для него?

2 (изменено: creature.ws, 2013-05-19 08:16:23)

Re: AHK: Повлиять на отдельно взятое устройство.

AHK HID
RawInput Reference

3 (изменено: Next, 2013-05-19 20:05:54)

Re: AHK: Повлиять на отдельно взятое устройство.

creature.ws пишет:

AHK HID

   Тут мне, пожалуй, не разобраться.  Ни понять как действует, ни запустить не получается.  Кроме "Call to nonexistent function." ничего не добился.

4

Re: AHK: Повлиять на отдельно взятое устройство.

ничего не добился.

И пытаться более не собираетесь?

5

Re: AHK: Повлиять на отдельно взятое устройство.

creature.ws пишет:

ничего не добился.

И пытаться более не собираетесь?

   Посмотрю ещё раз внимательнее переводы комментариев, но большой надежды у меня нет.  Там где начинается "DllCall", там заканчивается мой AHK.

6 (изменено: creature.ws, 2013-05-19 22:20:56)

Re: AHK: Повлиять на отдельно взятое устройство.

Библиотека по ссылке не требует сознательно использовать DllCall, достаточно прочитать документацию по библиотеке и ознакомиться с примерами.

Пример для демонстрации простоты (без использования библиотеки AHK HID):

#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"
    }
}

7

Re: AHK: Повлиять на отдельно взятое устройство.

creature.ws пишет:

Библиотека по ссылке не требует сознательно использовать DllCall, достаточно прочитать документацию по библиотеке и ознакомиться с примерами.

    Попробую разобраться.


Пример для демонстрации простоты (без использования библиотеки AHK HID):

  Да, опознаёт отлично.

8

Re: AHK: Повлиять на отдельно взятое устройство.

Опять понадобилось. Загрузил ИИ этой задачей, дал ему идентификатор. Попыток 7 он сделал. Или неверно работает с AHK HID и не запускается, или не делает то что нужно.

9

Re: AHK: Повлиять на отдельно взятое устройство.

Если под ИИ имеете в виду ChatGpt, то с AHK он работает плохо, скорее всего недостаточно данных.

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

10

Re: AHK: Повлиять на отдельно взятое устройство.

Да, с ним. Так уверенно выдавал код за кодом, но... увы.

11

Re: AHK: Повлиять на отдельно взятое устройство.

Четвертый по моим экспериментам чуть лучше справляется.

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

12

Re: AHK: Повлиять на отдельно взятое устройство.

Это был GPT-4o.

13

Re: AHK: Повлиять на отдельно взятое устройство.

В любом случае непонятно, в чём именно у вас проблема, и если разобрались в прошлый раз, то в чём разница.

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

14

Re: AHK: Повлиять на отдельно взятое устройство.

Устройство определяется, благодаря коду выше.
Заблокировать нужное действие от этого устройства не получается.
В прошлый раз вроде удалось даже переназначить действие. Не помню. И тот код почему-то не сохранился у меня, хотя я обычно такие вещи тщательно сохраняю. Может и тогда не вышло?