Скрипт Lua API Logitech G Hub

#lua #logitech #logitech-gaming-software

Вопрос:

Я написал простой скрипт Lua, который оставляет щелчки после нажатия кнопки mouse5. Проблема в том, что в строке 12, если я включу «нет», оно повторится только один раз, если я его удалю, оно повторится навсегда. Я хочу начать и завершить сценарий с помощью mouse5, если это возможно. Я знаю, что у людей и раньше были подобные проблемы, но я не смог найти решение. Есть какие-нибудь идеи?

Я использую API Logitech G Hub: (https://douile.github.io/logitech-toggle-keys/APIDocs.pdf)

И это для моего цикла: (https://www.tutorialspoint.com/lua/lua_repeat_until_loop.htm)

Мой код:

 function OnEvent(event, arg)
    OutputLogMessage("Event: "..event.." Arg: "..arg.."n")
EnablePrimaryMouseButtonEvents(true)
function OnEvent(event, arg)
    if event == "MOUSE_BUTTON_PRESSED" and arg == 5 then
        repeat
            Sleep(math.random(1046, 1292))
            PressMouseButton(1)
            Sleep(math.random(27, 78)) 
            ReleaseMouseButton(1)
            Sleep(math.random(314, 664))
        until not IsMouseButtonPressed(5)
        end    
    end
end
 

Комментарии:

1. Ваш код должен работать правильно. Пожалуйста, обратите внимание, что кнопка мыши G5 должна быть привязана к действию «Вперед» в интерфейсе GHUB. Это настройка по умолчанию, вы, вероятно, изменили ее вручную.

Ответ №1:

Обратите внимание, что ваша функция обработчика событий объявляется второй раз внутри самой себя в строке 4.

Кроме того, EnablePrimaryMouseButtonEvents() не обязательно вызывать несколько раз или с каждым входным событием — его можно поместить вне функции, где он будет выполняться только один раз. Что-то вроде первой или последней строки, вероятно, хорошая идея.

Наконец, я бы сказал, что условия сверху вниз немного более ясны. Так как насчет того, чтобы дать себе немного времени, чтобы отпустить кнопку и выполнить цикл while, если вы это сделаете. Если вы будете удерживать кнопку во время повторной проверки состояния кнопки, это остановит цикл :

 EnablePrimaryMouseButtonEvents(true)
function OnEvent(e,a)
    OutputLogMessage("Event: "..e.." Argument: "..a.."n")
    if e=="MOUSE_BUTTON_PRESSED" and a==5 then
    Sleep(200)
    while not IsMouseButtonPressed(5) do
        Sleep(math.random(1046,1292))
        -- maybe add another check here "if IMBP(5) then return end"
        PressMouseButton(1)
        Sleep(math.random(27,78)) 
        ReleaseMouseButton(1)
        Sleep(math.random(314,664))
    end end
end