Код
local winapi
do
-- У меня пути не стандартные, чтобы избежать свинарника.
-- Поэтому тут есть пара "лишних" строк.
-- Сохраняем _текущие_ пути по которым ищутся модули.
local back = package.path
-- Дописываю путь по которому у меня лежат модули.
package.path = "lua_plugins\\winapi\\?.lua;"..package.path
-- Подгружаем собственно модуль.
-- Хз почему, но грузить нужно именно так.
-- Просто require 'winapi' не пашет.
winapi = require 'winapi'
-- Подгружаем кусок отвечающий за клавиатуру
require[[winapi.keyboard]]
-- Возвращаем пути поиска модулей на исходные.
package.path = back
end
local pause_hook = function()
if winapi.GetKeyState(17) and winapi.GetKeyState(18) and winapi.GetKeyState(90) then
repeat
wait(1)
until not (winapi.GetKeyState(17) and winapi.GetKeyState(18) and winapi.GetKeyState(90))
while not (winapi.GetKeyState(17) and winapi.GetKeyState(18) and winapi.GetKeyState(90)) do
wait(1)
end
repeat
wait(1)
until not (winapi.GetKeyState(17) and winapi.GetKeyState(18) and winapi.GetKeyState(90))
end
end
debug.sethook (pause_hook, "l")
-- ДАЛЕЕ ВАШ СКРИПТ
while 1 do
log(os.clock())
wait(1)
end
Мой вариант без особых заморочек. Через дебаг луа и хуки. По поводу безопасности кода - в манах луа написано, что дебагне безопасен с точке зрения доступа к данным. Ну в том смысле, что это создает потенциальные пути для взлома. Если, скажем, взять варкрафт в котором огромный кусок написан на луа и включить там дебаг, то при желании можно получить доступ далеко не только к пользовательским функциям. Из минусов так же будет некторое падение производительности. В стандартном использовании будет не заметно, но если будет идти жесткий перебор массивов, то может быть существенно. Например, если используется findcolor на чистом луа - скорость просядет.
Данный код не совместим с моей дебаг либой (котора dbg, dbg.enable()). Если есть необходимость могу их скрестить.
Пауза на ctrl+alt+z
Получение кодов клавиш:
Код
--lua
local winapi
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
wait(1)
end
Сообщение отредактировал DarkMaster - 5.12.2023, 6:11