|
CapsLock On, Проверка статуса нажатия/включения |
|
|
Levo222 |
26.2.2019, 0:55
|
    
Journeyman
Сообщений: 411
Регистрация: 18.11.2017 Группа: Пользователи Наличность: 15
Пользователь №: 18.689

|
Задача сделать клавишу автобега в игре где её нет. Проверка включены ли статусные клавиши и автонажатие клавиш движения Скрипт определения включенности Caps Lock X2t
У кого-то может работать send217_down/send_down, у меня работает только sendex_down/up, ввиду несостыковки системы с Lua Код --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 -- горит капс log("CapsLock on") if not pressed_down then log("not pressed_down") log("Зажимаю W") log("Ждём 3 сек") --send217_down ("w") sendex_down ("w") pressed_down = true end else if pressed_down then --send217_up ("w") sendex_up ("w") pressed_down = false end end wait (100) end
-- РЕШЕНО --
|
|
|
|
|
  |
Ответов
Levo222 |
14.9.2025, 12:20
|
    
Journeyman
Сообщений: 411
Регистрация: 18.11.2017 Группа: Пользователи Наличность: 15
Пользователь №: 18.689

|
ДА вы известны) Цитата [14.09.2025 16:07] напиши код на lua который бы решал следующую задачу, выполняется в бесконечном цикле, при нажатии на капс-лок происходит спам левой кнопки мыши с интервалом в 100 мс, пока горит лампочка капс-лок, когда она выключена, спам прекращается DeepSeek | GptChat,
[14.09.2025 16:07] Для решения этой задачи на Lua, вам потребуется библиотека, которая позволяет взаимодействовать с операционной системой для: 1. Определения состояния клавиши Caps Lock. 2. Имитации нажатий мыши. 3. Задержки выполнения (sleep). Стандартный Lua не имеет таких возможностей "из коробки". Наиболее удобный способ сделать это на Windows (что является наиболее частым сценарием для подобных скриптов) - использовать LuaJIT с его FFI (Foreign Function Interface) для вызова функций WinAPI. Важное замечание: Этот код будет работать только с LuaJIT на операционной системе Windows. Использование таких скриптов может быть расценено как читерство в играх и привести к блокировке аккаунта. Используйте на свой страх и риск. При написании кода для Mac или Linux потребуются другие API (например, xdotool на Linux, AppleScript или CGEventPost на macOS). --- ### Код на LuaJIT (Windows) Код -- Требует LuaJIT для работы FFI local ffi = require("ffi")
-- Определения функций и структур WinAPI ffi.cdef [[ // Structure for mouse input typedef struct { LONG dx; LONG dy; DWORD mouseData; DWORD dwFlags; DWORD time; ULONG_PTR dwExtraInfo; } MOUSEINPUT;
// Structure for different input types (mouse, keyboard, hardware) typedef struct { DWORD type; union { MOUSEINPUT mi; // KEYBDINPUT ki; // Not needed for this task // HARDWAREINPUT hi; // Not needed for this task }; } INPUT;
// WinAPI functions SHORT GetKeyState(int vKey); VOID Sleep(DWORD dwMilliseconds); UINT SendInput(UINT nInputs, INPUT pInputs[], int cbSize); ]]
-- Константы WinAPI local VK_CAPITAL = 0x14 -- Virtual Key Code для Caps Lock local INPUT_MOUSE = 0x00000000 -- Тип ввода: мышь local MOUSEEVENTF_LEFTDOWN = 0x0002 -- Флаг события мыши: левая кнопка нажата local MOUSEEVENTF_LEFTUP = 0x0004 -- Флаг события мыши: левая кнопка отпущена
local CLICK_INTERVAL_MS = 100 -- Интервал между кликами (100 мс) local POLL_INTERVAL_MS = 50 -- Интервал проверки состояния Caps Lock, когда он выключен (чтобы не грузить CPU)
local isCapsOn = false local lastCapsState = false -- Для отслеживания изменений состояния и вывода сообщений
-- Настраиваем структуру INPUT для имитации одного левого клика -- Нам нужны два события: нажатие и отпускание local clickInputs = ffi.new("INPUT[2]")
-- Событие нажатия левой кнопки мыши clickInputs[0].type = INPUT_MOUSE clickInputs[0].mi.dwFlags = MOUSEEVENTF_LEFTDOWN
-- Событие отпускания левой кнопки мыши clickInputs[1].type = INPUT_MOUSE clickInputs[1].mi.dwFlags = MOUSEEVENTF_LEFTUP
print("Авто-кликер запущен. Нажмите Caps Lock для активации.") print("Закройте окно консоли, чтобы остановить скрипт.")
while true do -- GetKeyState возвращает состояние клавиши. -- Для toggle-клавиш (как Caps Lock), низкий бит (0x0001) указывает, включена ли клавиша (1) или выключена (0). local state = ffi.C.GetKeyState(VK_CAPITAL) isCapsOn = (state & 0x0001) ~= 0 -- Проверяем низкий бит
if isCapsOn then -- Caps Lock включен, спамим клики if not lastCapsState then print("Caps Lock ON: Начинаем спам левой кнопкой мыши.") lastCapsState = true end
-- Отправляем события нажатия и отпускания мыши ffi.C.SendInput(2, clickInputs, ffi.sizeof("INPUT"))
-- Ждем заданный интервал ffi.C.Sleep(CLICK_INTERVAL_MS) else -- Caps Lock выключен if lastCapsState then print("Caps Lock OFF: Спам левой кнопкой мыши прекращен.") lastCapsState = false end -- Спим немного, чтобы не грузить CPU, пока ничего не происходит ffi.C.Sleep(POLL_INTERVAL_MS) end end --- ### Как запустить: 1. Скачайте LuaJIT: Перейдите на официальный сайт LuaJIT (luajit.org) и скачайте соответствующую версию для вашей операционной системы (обычно это исполняемый .. Цитата [14.09.2025 16:09] если бы этот код был для скриптов UOPilot с его библиотеками, как бы он выглядел? DeepSeek | GptChat,
[14.09.2025 16:09] Конечно! Для UOPilot (Ultimate Online Pilot) скрипты пишутся на его собственной модифицированной версии Lua, которая предоставляет специфические функции для взаимодействия с игрой и операционной системой, но не имеет ffi или стандартного require. Вот как будет выглядеть этот код для UOPilot: Код -- UOPilot Lua Script для спама левой кнопкой мыши по Caps Lock
-- Константы local CLICK_INTERVAL_MS = 100 -- Интервал между кликами (100 мс) local POLL_INTERVAL_MS = 50 -- Интервал проверки состояния Caps Lock, когда он выключен
local isCapsOn = false local lastCapsState = false -- Для отслеживания изменений состояния и вывода сообщений
-- Функция msg() используется в UOPilot для вывода сообщений в лог/окно UOPilot. msg("Авто-кликер запущен. Нажмите Caps Lock для активации.") msg("Закройте UOPilot или остановите скрипт вручную, чтобы остановить.")
while true do -- KeyLock("CAPS") - это функция UOPilot, которая возвращает true, если Caps Lock включен, -- и false, если выключен. Аналогично для "NUM" (Num Lock) и "SCROLL" (Scroll Lock). isCapsOn = KeyLock("CAPS")
if isCapsOn then -- Caps Lock включен, спамим клики if not lastCapsState then msg("Caps Lock ON: Начинаем спам левой кнопкой мыши.") lastCapsState = true end
-- LClick() - это функция UOPilot, которая имитирует нажатие левой кнопки мыши. LClick()
-- Wait() - это функция UOPilot для задержки выполнения скрипта в миллисекундах. Wait(CLICK_INTERVAL_MS) else -- Caps Lock выключен if lastCapsState then msg("Caps Lock OFF: Спам левой кнопкой мыши прекращен.") lastCapsState = false end -- Спим немного, чтобы не грузить CPU, пока ничего не происходит Wait(POLL_INTERVAL_MS) end end ### Как запустить в UOPilot: ... к слову этот код тоже нихрена не работает...
|
|
|
|
Сообщений в этой теме
Levo222 CapsLock On 26.2.2019, 0:55 sutra Нужно подключить уже готовую библиотеку по обработ... 26.2.2019, 1:26 Levo222
Нужно подключить уже готовую библиотеку по обрабо... 26.2.2019, 7:05 Levo222
Если lua - придётся забыть про goto,
Да и .... 26.2.2019, 14:56 DarkMaster Есть хорошая новость - я научился из луа дергать с... 26.2.2019, 1:44 Levo222
по адресу luaPlugins\winapi
Кириллица не п... 26.2.2019, 7:17 Levo222
Есть хорошая новость - я научился из луа дергать ... 27.2.2019, 1:13 Levo222
Есть хорошая новость - я научился из луа дергать ... 13.9.2025, 9:40  Levo222
Короче может без библиотек есть возможность закли... 13.9.2025, 12:07 sutra ВО! Ваще ничего не понял, но прогресс очевиден... 26.2.2019, 1:45 DarkMaster Либы написаны на чистом lua с использованием fii. 26.2.2019, 1:53 sutra
Браво, Дарк! Мастер! Интересно, думаю, кр... 26.2.2019, 1:57 cirus
Изменить на log кто не догадается сам. 26.2.2019, 1:58 sutra Угадал, только Сайрус! 26.2.2019, 2:01 DarkMaster
Да я запарился уже их туда-сюда писать, поэтому у... 26.2.2019, 2:02 sutra Вот эта фраза мне нравится больше всего. Хз, ткнул... 26.2.2019, 2:05 DarkMaster
Взял из демки в доках к либе. Распутывать всю либ... 26.2.2019, 2:12 sutra В этом и заключается профессионализм. Знаешь где в... 26.2.2019, 2:42 FREEON
Всех нас точно победит искусственный интеллект, е... 26.2.2019, 11:45  Levo222
Страх которому не суждено сбыться
End
которой ... 26.2.2019, 12:10  Levo222 ...
Как удалить то сообщение ниче не могу понять 26.2.2019, 12:45 Levo222
эрудиция в ближайшем будущем, будет важнее интелл... 26.2.2019, 13:32 sutra Оверлеи, кэши, хеши. Что-то уже история, что-то пр... 26.2.2019, 3:14 xolost
Оверлеи, кэши, хеши. Что-то уже история, что-то п... 26.2.2019, 4:01 sutra
Абсолютно логично, он же умный, а я ... не очень,... 26.2.2019, 4:06 xolost
Абсолютно логично, он же умный, а я ... не очень,... 26.2.2019, 4:13 cirus
2.41.
Нет. Он должен быть как в примере и на яз... 26.2.2019, 11:15 Levo222
2.41.
26.2.2019, 11:23 DarkMaster
winapi сам подтянет glue.
Я вообще ярый сторонни... 26.2.2019, 11:31 DarkMaster
Я не могу понять откуда оно у вас. Попробуйте уда... 26.2.2019, 15:07 Levo222
Я не могу понять откуда оно у вас. Попробуйте уда... 26.2.2019, 15:24  FREEON ...
Как удалить то сообщение ниче не могу понять ... 26.2.2019, 15:43 DarkMaster
Ну программирование оно вообще все из подключения... 26.2.2019, 15:47 Levo222
о и пути писать, но я еще раз говорю - я сторонни... 26.2.2019, 15:57 sutra Ну у меня то страха нет. А вот то, что народ потих... 26.2.2019, 15:54 Levo222 Log
14:15:01 1 (autosaved_1.txt, 1... 27.2.2019, 10:17 DarkMaster
Самый простой способ - блок do end в шапку. Далее... 27.2.2019, 10:18 Levo222
Самый простой способ - блок do end в шапку. Далее... 27.2.2019, 10:38 DarkMaster while 1 do
local state, toggle = GetKeyState... 27.2.2019, 11:05 Levo222
break был написан с ошибкой, аккуратно.
--Lua
Er... 27.2.2019, 11:13 cirus
Первой строкой скрипта должно быть --lua.
Удалить... 27.2.2019, 11:46 Levo222 Зависает на строке
package.path = back
и пишет в ... 27.2.2019, 12:02 cirus Пилот с нужными файлами 27.2.2019, 12:07 Levo222
Пилот с нужными файлами
Ниче не понимаю
(a... 27.2.2019, 12:22 DarkMaster Код полный дайте. Где-то проущенно = 27.2.2019, 12:23 Levo222
Код полный дайте. Где-то проущенно =
--lua
do
l... 27.2.2019, 12:25 DarkMaster Сохраняйте форматирование. От этого очень много ош... 27.2.2019, 12:28 Levo222
Сохраняйте форматирование. От этого очень много о... 27.2.2019, 12:33 DarkMaster
Это паттерн для добавления пути загрузки. Вместо ... 27.2.2019, 12:37 Levo222
Вы используете пилот cirus'a? Распаковали в о... 27.2.2019, 12:39 DarkMaster
с маленькой буквы
send217_down ("W") 27.2.2019, 13:07 Levo222
с маленькой буквы
send217_down ("W")
Н... 27.2.2019, 13:11 cirus
Отпускать клавишу кто будет? 27.2.2019, 13:27 DarkMaster
Что?
Очень похоже на криво сделанную привязку.
... 27.2.2019, 13:27 Levo222
Вы можете убедиться в этом поместив:
local state... 27.2.2019, 13:30 DarkMaster --lua
do
local back = package.path
package.path ... 27.2.2019, 13:58 Levo222
[code]--lua
do
local back = package.path
packag... 27.2.2019, 14:01 DarkMaster do
local back = package.path
package.path = ... 27.2.2019, 14:09 Levo222
Для начала их там два должно писаться. Первый гов... 27.2.2019, 14:13 DarkMaster Какое? ТЗ дайте тогда четкое.
На данный момент при... 27.2.2019, 14:18 Levo222
Какое? ТЗ дайте тогда четкое.
На данный момент пр... 27.2.2019, 14:21 DarkMaster
p_d - это переменная. В ней может быть только зна... 27.2.2019, 14:43 Levo222
Что происходит? У меня вообще проблем не возникае... 27.2.2019, 14:48 cirus Начните с самого простого:
--lua
do
local back = ... 27.2.2019, 14:48 Levo222
Начните с самого простого:
[code]--lua
do
local ... 27.2.2019, 14:51 cirus
А оно вообще в приложении работает? Может какой-н... 27.2.2019, 15:14 Levo222
А оно вообще в приложении работает? Может какой-н... 27.2.2019, 15:15 DarkMaster а без 217? 27.2.2019, 17:29 Levo222
а без 217?
Нет.
Без 217
Но пойдёт и так, если ко... 27.2.2019, 19:17 DarkMaster Пилот запущен от админа? Проверьте - это новый exe... 27.2.2019, 19:54 Levo222
Пилот запущен от админа? Проверьте - это новый ex... 27.2.2019, 23:41 Levo222
Пилот запущен от админа? Проверьте - это новый ex... 28.2.2019, 6:42 DarkMaster Я вижу лишь удаленный в корзину какой-то файл. У м... 28.2.2019, 13:28 Levo222
Я вижу лишь удаленный в корзину какой-то файл. У ... 28.2.2019, 17:36 DarkMaster
Ввиду потенциального риска безопасности, позвольт... 28.2.2019, 17:45 Levo222
Ввиду потенциального риска безопасности, позвольт... 28.2.2019, 18:13 DarkMaster
Есть гораздо более популярные и распространненые ... 28.2.2019, 19:29 Levo222 Да, ладно х с ним. Продолжим дискуссию тут. Всё же... 28.2.2019, 19:59 DarkMaster интересный факт. Если мы проверяем состояни мыши (... 6.3.2021, 23:00 Fors1k эвентам клавиш, а не по проверке состояний?
Лови... 7.3.2021, 4:15 DarkMaster Нет ибо с точно таким же успехом я могу крутить wh... 7.3.2021, 10:56 Cockney
Нет ибо с точно таким же успехом я могу крутить w... 7.3.2021, 14:56 DarkMaster попробуйте вот это
https://forum.uokit.com/index.p... 13.9.2025, 10:06 Levo222
попробуйте вот это
https://forum.uokit.com/index.... 13.9.2025, 10:47 DarkMaster https://forum.uokit.com/index.php?showtopic...amp;... 13.9.2025, 19:22 Levo222
https://forum.uokit.com/index.php?showtopic...amp... 13.9.2025, 20:13 DarkMaster всмысле не присваивается? Дайте минимальный полный... 13.9.2025, 21:17 Levo222
Дайте минимальный полный код для воспроизведения.... 14.9.2025, 9:56 DarkMaster
скобки где? 13.9.2025, 22:10 DarkMaster
код не запускается. во-первых скобки, во-вторых... 14.9.2025, 10:24 Levo222
keystate является частью kbd.
В СПРАВКЕ ОБ ЭТО... 14.9.2025, 10:56 DarkMaster
это не так. ничего не модифицированни, require и ... Вчера, 0:42 DarkMaster --lua
require "lua_system\\init... Вчера, 0:58
8 чел. читают эту тему (гостей: 8, скрытых пользователей: 0)
Пользователей: 0
|
|