|
|
|
CapsLock On, Проверка статуса нажатия/включения |
|
|
Levo222 |
27.2.2019, 12:33
|
Journeyman
Сообщений: 399
Регистрация: 18.11.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.689
|
Цитата(DarkMaster @ 27.2.2019, 16:28) Сохраняйте форматирование. От этого очень много ошибок идет, ну и мне сидеть каждый раз править его перед чтением кода не очень интересно. Код --lua do local back = package.path package.path = "luaPlugins\\winapi\\?.lua;"..package.path setfenv(1, require'winapi') require[[winapi.keyboard]] package.path = back end
-- Поолучаем состояние клавиши: -- state - нажата/отжата -- toggle - для лампочек горит/не горит. log(tostring(state),tostring(toggle)) while 1 do local state, toggle = GetKeyState(0x14) if toggle then -- горит капс log("++++") -- Send217_down ("W") wait (300) else break end end
Это ваш же код. Он полностью рабочий. Запускаете от админа? Каких-то хвостов еще в редакторе не валяется? Форматирует он его не так! Сейчас такое ощущение что строки end в конце не хватает но форматирование ничего не говорит и ставит всё в 1 столбик. Закрытого While не хватает, но на закрытие он ругается Код --lua do local back = package.path package.path = "luaPlugins\\winapi\\?.lua;"..package.path setfenv(1, require'winapi') require[[winapi.keyboard]] package.path = back end
-- Поолучаем состояние клавиши: -- state - нажата/отжата -- toggle - для лампочек горит/не горит. log(tostring(state),tostring(toggle)) while 1 do local state, toggle = GetKeyState(0x14) if toggle = true then -- горит капс log("++++") Send217_down ("W") wait (300) else break end end
|
|
|
|
DarkMaster |
27.2.2019, 12:37
|
Модератор UOPilot
Сообщений: 9.462
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27674
Пользователь №: 11.279
|
Цитата Не совсем понятна строка ?.lua;"..package.path и помоему пилоту она тоже непонятна... Это паттерн для добавления пути загрузки. Вместо ? будет подставлено имя модуля, которое указано в require. Возможные пути перечисляются через ';'. Таким образом данная строка добавляет путь по которому происходит поиск модуля. Цитата Форматирует он его не так! Встроенное форматирование пока не поддерживает lua. Цитата Сейчас такое ощущение что строки end в конце не хватает но форматирование ничего не говорит и ставит всё в 1 столбик Там всего хватает. Вы используете пилот cirus'a? Распаковали в отдельную папку? Запускаете от админа? Ошибку продолжает писать ту же самую?
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
Levo222 |
27.2.2019, 12:39
|
Journeyman
Сообщений: 399
Регистрация: 18.11.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.689
|
Цитата(DarkMaster @ 27.2.2019, 16:37) Вы используете пилот cirus'a? Распаковали в отдельную папку? Запускаете от админа? Ошибку продолжает писать ту же самую?
Да (Automove_0.txt, 0): nil nil теперь первая же строка Даже 18: attempt to call global 'Send217_down' (a nil value) --lua do local back = package.path package.path = "luaPlugins\\winapi\\?.lua;"..package.path setfenv(1, require'winapi') ______________ Так проблема с клавишей. Он как бы работает, но 18: attempt to call global 'Send217_down' (a nil value) Это явно не то написание Не могу понять lua_pushinteger(L, 0x57); lua_setfield(L, -STACK_TOP + 1, "W"); Вот это напсиание чтоли использовать?
|
|
|
|
Levo222 |
27.2.2019, 13:11
|
Journeyman
Сообщений: 399
Регистрация: 18.11.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.689
|
Цитата(DarkMaster @ 27.2.2019, 17:07) с маленькой буквы send217_down ("W")
Не работает. С условием времени работает но не останавливается sendex_down ("W") работает, но выдает такое Automove_0.txt, 0): exceeded the number of keystrokes + он и при сворачивании открытого окна в самом коде пилота пропахал строку из W Нужно только для привязанного окна ///////////////////////////////////////////// + непонятно условие если я пишу if toggle then как он будет проверять включено или выключено? если пишу if toggle == true then ошибку не выдает, но и не едет...
|
|
|
|
DarkMaster |
27.2.2019, 13:27
|
Модератор UOPilot
Сообщений: 9.462
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27674
Пользователь №: 11.279
|
Цитата С условием времени работает но не останавливается Что? Цитата + он и при сворачивании открытого окна в самом коде пилота пропахал строку из W Очень похоже на криво сделанную привязку. Цитата непонятно условие если я пишу if toggle then как он будет проверять включено или выключено? Проверяет он в: local state, toggle = GetKeyState(0x14) А вот это: if toggle then анализ результата. В луа любое значение не равное false и nil является true. Т.е. 0 тоже true. В данном случае между: if toggle == true then и if toggle then нет вообще никакой разницы. Вы можете убедиться в этом поместив: local state, toggle = GetKeyState(0x14) внутрь цикла.
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
Levo222 |
27.2.2019, 13:30
|
Journeyman
Сообщений: 399
Регистрация: 18.11.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.689
|
Цитата(DarkMaster @ 27.2.2019, 17:27)
Вы можете убедиться в этом поместив: local state, toggle = GetKeyState(0x14) внутрь цикла.
Я вам верю, но у меня привязка сделана нормально - в самом логе результаты истины отображаются в виде+ но на клавишу он делает мат exceeded the number of keystrokes Цитата(cirus @ 27.2.2019, 17:27) send217_down ("W")
Отпускать клавишу кто будет?
Мне нужно условие доп нажатие рукой на W или ""лампочка Caps погасла" Цитата(cirus @ 27.2.2019, 17:27) require("Kbd") этот плагин вообще не нужен, он работает только с старых версиях пилота.
.... Вобщем нужно так: при включенном капсе при ручном нажатии W подается send217_up ("W") send217_up ("W") подаётся при отключении caps lock или при ручном нажатии на W send217_up ("W") подаётся при отключении капса при условии что W не нажата вручную. /// Вобщем нужно что-то подобное Код while 1 do local state, toggle = GetKeyState(0x14) local state = GetKeyState(0x57) if toggle and state == nil then -- горит капс log("Caps Lock on") -- sendex_down ("W") send_down ("W") else or state send_up ("W") end end
|
|
|
|
Levo222 |
27.2.2019, 14:01
|
Journeyman
Сообщений: 399
Регистрация: 18.11.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.689
|
Цитата(DarkMaster @ 27.2.2019, 17:58) Код --lua do local back = package.path package.path = "luaPlugins\\winapi\\?.lua;"..package.path setfenv(1, require'winapi') require[[winapi.keyboard]] package.path = back end
-- Поолучаем состояние клавиши: -- state - нажата/отжата -- toggle - для лампочек горит/не горит. local pressed_down = false while 1 do local state, toggle = GetKeyState(0x14) log(tostring(state),tostring(toggle)) if toggle then -- горит капс if not pressed_down then log("++++") send217_down ("W") pressed_down = true end else if pressed_down then send217_up ("W") pressed_down = false end end wait (100) end
В блокноте работает нормально. Всегда выдаёт false Код local pressed_down = false Это тоже интерпретация из плагина? Я подозреваю всегда будет путаница потому что я еще какие-то клавиши жму и он будет останавливать? Нужно конкретно указывать а как state интерпретирует ту или иную клавишу через присвоение переменной? ххх Вобщем ниче не понял
|
|
|
|
DarkMaster |
27.2.2019, 14:09
|
Модератор UOPilot
Сообщений: 9.462
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27674
Пользователь №: 11.279
|
Код do local back = package.path package.path = "luaPlugins\\winapi\\?.lua;"..package.path setfenv(1, require'winapi') require[[winapi.keyboard]] package.path = back end
-- Поолучаем состояние клавиши: -- state - нажата/отжата -- toggle - для лампочек горит/не горит. local pressed_down = false while 1 do local state, toggle = GetKeyState(0x14) log(tostring(state),tostring(toggle)) if toggle then -- горит капс if not pressed_down then log("++++") send217_down ("W") pressed_down = true end else if pressed_down and not GetKeyState(string.byte("W")) then send217_up ("W") pressed_down = false end end wait (100) end
С проверкой ручного зажатия W, чтобы не отжимало, если выключаете капслок, но кнопку W нажимаете руками в это время. Цитата Это тоже интерпретация из плагина? Я подозреваю всегда будет путаница Это созданная мной переменная для хранения статуса зажимали мы кнопку или нет. Цитата Всегда выдаёт false Для начала их там два должно писаться. Первый говорит о зажатии кнопки, второй о лампочке.
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
Levo222 |
27.2.2019, 14:13
|
Journeyman
Сообщений: 399
Регистрация: 18.11.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.689
|
Цитата(DarkMaster @ 27.2.2019, 18:09) Для начала их там два должно писаться. Первый говорит о зажатии кнопки, второй о лампочке.
Да, пишет. И пишет без остановки. Само действие не выполняет Цитата(DarkMaster @ 27.2.2019, 18:09) Это созданная мной переменная для хранения статуса зажимали мы кнопку или нет.
Тогда давайте сократим её до p_d Итак. Код --lua do local back = package.path package.path = "luaPlugins\\winapi\\?.lua;"..package.path setfenv(1, require'winapi') require[[winapi.keyboard]] package.path = back end
-- Поолучаем состояние клавиши: -- state - нажата/отжата -- toggle - для лампочек горит/не горит. local p_d = false while 1 do local state, toggle = GetKeyState(0x14) log(tostring(state),tostring(toggle)) if toggle then -- горит капс if not p_d then log("++++") send217_down ("W") p_d = true end else if p_d then send217_up ("W") p_d = false end end wait (100) end Условие не выполняется Может лучше циклу while присвоить отсутствие нажатого вручную W и горящей лампочки Caps Locka и пусть он гоняет нажатие W по кругу?
|
|
|
|
Levo222 |
27.2.2019, 14:21
|
Journeyman
Сообщений: 399
Регистрация: 18.11.2017 Группа: Пользователи Наличность: 0
Пользователь №: 18.689
|
Цитата(DarkMaster @ 27.2.2019, 18:18) Какое? ТЗ дайте тогда четкое. На данный момент при включенном капслоке происходит зажатие кнопки "W" до момента пока не будет выключен капслок и отжата кнопка "W", если она удерживалась на момент выключения капслока.
Я не зажимаю W когда включаю Caps Lock. Сижу отпускаю W и только тогда жму CapsLock как-то так P.S: Не работает в блокноте if toggle then -- горит капс log("CapsLock on") if not pressed_down then log("++++") send217_down ("W") pressed_down = true end Только так капс лог в лог выводится, значит p_d not work( внутри проверки P_D должна быть ПРОВЕРКА НА CAPS LOCK зачем он мне 100500 раз пишет что клавиша отжата, я ей не пользуюсь
|
|
|
|
DarkMaster |
27.2.2019, 14:43
|
Модератор UOPilot
Сообщений: 9.462
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27674
Пользователь №: 11.279
|
Цитата внутри проверки P_D
p_d - это переменная. В ней может быть только значение, но никак не проверка. Проверка это функция. Цитата P.S: Не работает в блокноте Что происходит? У меня вообще проблем не возникает. Зажег капс - зажало. Выключил капс - отпустило. Цитата зачем он мне 100500 раз пишет что клавиша отжата, я ей не пользуюсь Затем, что я оставил включенной вывод логов, т.к. есть проблемы по работе. Если не нужно - уберите все строки log(***)
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|