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

> CapsLock On, Проверка статуса нажатия/включения
Levo222
сообщение 26.2.2019, 0:55
Сообщение #1


*****

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





-- РЕШЕНО --



Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
 
Ответить в эту темуОткрыть новую тему
Ответов
Levo222
сообщение 14.9.2025, 12:20
Сообщение #2


*****

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:


...

к слову этот код тоже нихрена не работает...
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Сообщений в этой теме
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

 

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