Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Проблема hotkey'я (древняя)
Kangoshi
сообщение 22.7.2023, 17:13
Сообщение #1


**

Neophyte
Сообщений: 36
Регистрация: 9.8.2011
Группа: Пользователи
Наличность: 0
Пользователь №: 13.878



Задача: по нажатию определённой клавиши проверять условие и в одном случае нажимать другую клавишу, а во втором случае - ту же клавишу, по которой запускается скрипт.
Проблема: при попытке послать нажатие клавиши хоткея через ардуину, пилот отлавливает нажатие и останавливает скрипт.
Неплохо было бы разделить старт и стоп скрипта в настройках хоткеев, но сделать это самому, наверное, невозможно? Об этом просили ещё тут.
Кроме как "потерять" этот слот на панели, есть варианты нажать всё-таки эту клавишу?
Код
--lua
local hw = require'arduino'hw.com = hw.get_port (2341, 8037)
if hw.com < 1 then
    log ('error = ' .. tostring(hw.com))
    end_script ()end
hw.set_delay_key (40)
hw.set_random_delay_key(20)

if color (551, 860) == 11909821 then
        hw.key ('5')
end
if color (551, 860) == 5395541 then
        hw.key ('4')
end

Нажимаю '5' и скрипт сам себя останавливает. Условие выполняется.

Подумал и дополнил: вариант разделить старт и стоп - не вариант. В этом случае по нажатию клавиши пилот будет бесконечно запускать скрипт. Нужно, чтобы он запускал скрипт, если тот уже не исполняется.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 22.7.2023, 17:54
Сообщение #2


***********

Модератор UOPilot
Сообщений: 9.467
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27725
Пользователь №: 11.279



Код

print = log
print "clear"
print "mode compact"
local cfg, fi, open, click = {},{},{},{}
--dbg.enable(1)



local winapi, socket
do
    -- У меня пути не стандартные, чтобы избежать свинарника.
    -- Поэтому тут есть пара "лишних" строк.
    -- Сохраняем _текущие_ пути по которым ищутся модули.
    local back = package.path
    -- Дописываю путь по которому у меня лежат модули.
    package.path = "lua_plugins\\winapi\\?.lua;"..package.path
    -- Подгружаем собственно модуль.
    -- Хз почему, но грузить нужно именно так.
    -- Просто require 'winapi' не пашет.
    winapi = require 'winapi'
    --ext.lg(winapi)
    -- Подгружаем кусок отвечающий за клавиатуру
    require[[winapi.keyboard]]
    -- Возвращаем пути поиска модулей на исходные.
    package.path = back

    socket = require 'socket'
end

-- Поолучаем состояние клавиши:
-- state - нажата/отжата
-- toggle - для лампочек горит/не горит.
--local state, toggle = GetKeyState(0x14)
--log(tostring(state),tostring(toggle))

local state_arr = {}


while 1 do
    for i = 0, 255 do
        local state, toggle = winapi.GetKeyState(i)
        if state and not state_arr[i] then
            state_arr[i] = true
            log(string.format("%.3f", os.clock())..": "..i.." down")
        elseif not state and state_arr[i] then
            state_arr[i] = false
            log(string.format("%.3f", os.clock())..": "..i.." up")
        end
    end
    socket.sleep(0.001)
end

это мой детектор нажатий клавиш. Удобно мониторить, дергать коды. Смысл в том, что вы можете внутри своего скрипта самостоятельно отслеживать нажатия, отжатия клавиш и соответственно делать на них реакции. Т.е. по сути у вас есть инструмент создания собственных хоткеев. winapi дергать с luapower.com

он потянет за собой glue и events вроде.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Kangoshi
сообщение 22.7.2023, 18:24
Сообщение #3


**

Neophyte
Сообщений: 36
Регистрация: 9.8.2011
Группа: Пользователи
Наличность: 0
Пользователь №: 13.878



Цитата(DarkMaster @ 22.7.2023, 17:54) *
winapi дергать с luapower.com
он потянет за собой glue и events вроде.

"?.lua" в строке "package.path = "lua_plugins\\winapi\\?.lua;"..package.path" что делает?
И каким образом winapi "потянет за собой glue и events"?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 22.7.2023, 19:10
Сообщение #4


***********

Модератор UOPilot
Сообщений: 9.467
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27725
Пользователь №: 11.279



Это шаблоны имен для подгрузки модулей. Вместо ? будет подставлено имя модуля. Потянет ибо у него зависимости от этих двух модулей. Там на страничке винапи есть указания зависимостей и линки на них.

у меня внутри винапи лежит glue и events чтобы не париться с переносами. отсюда и шаблон такой.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 27.4.2024, 17:54
Designed by Nickostyle