Сценарии Logitech, сочетающие нажатие клавиши и щелчок мыши

Я пытаюсь создать сценарий, который многократно нажимает левую кнопку мыши, когда я одновременно удерживаю левую клавишу управления с левой кнопкой мыши

Вот что у меня есть на данный момент:

function OnEvent(event, arg, family)
  OutputLogMessage("clicked event = %s, arg = %s\n", event, arg);
 if event == "MOUSE_BUTTON_PRESSED" and arg == 1 and Ctrl_Down == 1 then
      repeat
      PressMouseButton(1) //repeat while the left mouse button down
      until not PressMouseButton(1)
     else ReleaseMouseButton(3) //stop the repating on left mouse button up
  end

end  

Обратите внимание, что я впервые просматриваю этот тип кодирования, так как любая помощь приветствуется.


person Shrroy    schedule 13.02.2019    source источник


Ответы (2)


Прежде всего, вы должны определить EnablePrimaryMouseButtonEvents(), чтобы включить отчеты о событиях для кнопки мыши 1.

Чтобы избежать бесконечного цикла, вы должны поставить sleep();

Нажмите левую клавишу управления, затем левую кнопку мыши, щелчок будет повторяться, пока вы не отпустите левую кнопку мыши, затем отпустите левую клавишу управления, скрипт должен быть остановлен

Ваш окончательный код должен быть таким:

EnablePrimaryMouseButtonEvents(true);

function OnEvent(event, arg)
    if IsModifierPressed("lctrl") then
        repeat  
            if IsMouseButtonPressed(1) then
                repeat
                    PressMouseButton(1)
                    Sleep(15)
                    ReleaseMouseButton(1)
                until not IsMouseButtonPressed(1)
            end             
        until not IsModifierPressed("lctrl")
    end         
end
person Adam    schedule 22.02.2019
comment
Потрясающие! это именно то, что я хотел сделать - person Shrroy; 22.02.2019

То, что вы конкретно ищете, может быть невозможно с api.

Когда вы вызываете PressMouseButton(1), это изменяет состояние левой кнопки мыши. когда вы вызываете ReleaseMouseButton(1), то же самое верно, даже если вы все еще нажимаете кнопку, скрипт увидит ее как выпущенную. Это означает, что вы не можете использовать IsMouseButtonPressed(1), чтобы определить, нажата ли кнопка.

Чтобы создать "щелчок", вам нужно будет использовать PressAndReleaseMouseButton(1), и при этом вы больше не сможете определить, когда ВЫ перестали нажимать кнопку мыши. В качестве альтернативы вы можете посмотреть на клавишу ctrl и посмотреть, нажата ли она по-прежнему, используя IsModifierPressed("ctrl").

Следующее должно повториться после того, как будет обнаружен щелчок левой кнопкой мыши с нажатой клавишей Ctrl, и закончится только после того, как ctrl будет отпущен:

function OnEvent(event, arg, family)
    OutputLogMessage("clicked event = %s, arg = %s\n", event, arg);
    if event == "MOUSE_BUTTON_PRESSED" and arg == 1 and Ctrl_Down == 1 then
        repeat
            PressAndReleaseMouseButton(1) --repeat while the ctrl is still pressed
        until not IsModifierPressed("ctrl")
    end
end

Эта информация основана на Logitech G-series Lua API V3.02.

person Nifim    schedule 18.02.2019
comment
@Liam Это входит в оператор if? мне не удалось найти информацию, подтверждающую это условие Ctrl_Down == 1, возможно, его нужно заменить на IsModifierPressed("ctrl") - person Nifim; 19.02.2019
comment
Он все еще повторяет щелчок, скрипт не останавливается - person Shrroy; 19.02.2019
comment
Повторяется ли это в цикле repeat бесконечно? или PressAndReleaseMouseButton вызывает рекурсивные вызовы OnEvent? если вы видите несколько OutputLogMessage, чем OnEvent, если это так, вы можете удалить цикл repeat вместе. - person Nifim; 20.02.2019
comment
он повторяется в цикле повторения бесконечно, что вызывает задержку на компьютере, мне нужно перезагрузить компьютер, чтобы исправить это - person Shrroy; 21.02.2019