Скетч и модуль lua:
Arduino.zip ( 7,33 килобайт )
Кол-во скачиваний: 1123
Драйвер для ардуино:
CH341SER.zip ( 185,9 килобайт )
Кол-во скачиваний: 1577
Arduino позволяет эмулировать нажатия клавиш клавиатуры и мыши, в том числе в приложениях, которые блокируют нажатия кликеров.
Может поворачивать камеру в шутерах и играх, в которых камера поворачивается с зажатой правой кнопкой мыши.
Дополнительная https://forum.uokit.com/index.php?showtopic=21749 по обходу защиты в MMORPG.
Работает только с активным окном.
--lua
local hw = require'arduino'
hw.com = hw.get_port (2341, 8036) -- указать vid и pid ардуино
if hw.com < 1 then -- если номер порта меньше 1
log ('error = ' .. tostring(hw.com)) -- код ошибки, если 0 значит устройство с указанными vip и pid не найдено
end_script ()
end
hw.set_delay_key (20) -- установить паузу между нажатиями клавиш клавиатуры
hw.set_random_delay_key(10) -- установить рандом между нажатием и отпускание клавиш от 0 до 9 мсек
-- т. е. между нажатием и отпусканием клавиши будет пауза от 20 до 29 мсек
wait (3000) -- пауза 3 секунды чтобы переключиться на нужное окно
hw.key ('k') -- нажать клавишу 'k'
hw.key (hw.enter) -- нажать 'Enter'
wait (1000) -- пауза 1 сек.
hw.key_down ('s') -- зажать клавишу 's'
wait (3000) -- пауза 3 сек., при этом клавиша будет зажата
hw.key_up ('s') -- отпустить клавишу 's'
hw.key (hw.enter) -- нажать 'Enter'
hw.text ('Hello Привет') -- напечатать текст
hw.key ('V') -- нажать Shift+'v'
--lua
local hw = require'arduino'
hw.com = hw.get_port (2341, 8036) -- указать vid и pid ардуино
if hw.com < 1 then -- если номер порта меньше 1
log ('error = ' .. tostring(hw.com)) -- код ошибки
end_script ()
end
hw.set_delay_mouse (20) -- установить паузу между нажатиями клавиш мыши
hw.set_random_delay_mouse(10) -- установить рандом между нажатиями клавиш мыши от 0 до 9 мсек
-- т. е. между нажатием и отпусканием кнопки мыши будет пауза от 20 до 29 мсек.
hw.set_offset_mousemove(4) -- шаг перемещения курсора, чем больше тем быстрее перемещается
hw.set_delay_mousemove(2) -- установить паузу между каждый шагом перемещения мыши, чем меньше, тем быстрее перемещается
hw.mouse.left (200, 100) -- клик левой кнопкой мыши в координатах 200, 100
hw.mouse.right (200, 100) -- клик правой кнопкой мыши
wait (3000) -- пауза 3 секунды
hw.mouse.left_dbl (35, 35) -- двойной клик левой кнопкой мыши
wait (2000)
hw.mouse.left_down (200, 200) -- зажать левую кнопку мыши
wait(500)
hw.mouse.left_up (900, 300) -- отпустить левую кнопку мыши
Описание требований к арудино/закидывание скетчей и т.д. рекомендую взять из старой темы. Без этого боюсь людям будет сложно, а по разным темам растаскивать тяжело ориентироваться, да и пост может человек почистить и получится нехорошо.
На случай если будет лень вбивать vid и pid:
Скачал UO Pilot v2.41 (31.12.2018),Скетч и модуль lua.
Записал скетч в ардуино, положил модуль в папку с пилотом. Произвел рекомендуемые настройки.
Запускаю скрипт:
Ардуино micro или leonardo?
Номер порта ардуино правильно определяется?
hw.com = hw.get_port (2341, 8036) -- указать vid и pid ардуино
log(hw.com) -- в логе номер порта, в котором ардуино
pro micro.
Если использовать этот скрипт
Совершенно верно, все работает. Только не на этом компе, а на другом.
1пк Win 7 - не работает.
2пк Win 10 - работает.
Пока для меня это явные отличия между двумя компами. Буду разбираться почему не хочет работать на 1.
Спасибо за помощь!!!
Ещё такой момент, в место символа 'k' пишет символ 'л', а если сменить раскладку клавиатуры подключенной к компьютеру клавиатуры набирает правильный символ как это побороть?
Подскажите как Arduino работает для виртуалок то есть например включены 3 виртуалки vmware workstation и со всеми тремя Arduino сможет одновременно работать?
И например такая плата подойдет?
https://aliexpress.ru/item/1005001742819480.html
Отрабатывает один раз, при повторном запуске UO Pilot зависает намертво при использовании этого скрипта:
Если во втором скрипте раскомментировать:
Если во втором скрипте раскомментировать:
--hw.mouse.move (651, 225) -- переместить мышь
то все работает без зависаний.
Раскомментирование любой из этих строк:
--hw.set_random_delay_mouse(10) -- установить рандом между нажатиями клавиш мыши от 0 до 9 мсек
-- т. е. между нажатием и отпусканием кнопки мыши будет пауза от 20 до 29 мсек.
--hw.set_offset_mousemove(4) -- шаг перемещения курсора, чем больше тем быстрее перемещается
--hw.set_delay_mousemove(2) -- установить паузу между каждый шагом перемещения мыши, чем меньше, тем быстрее перемещается
приводит к полному зависанию пилота, которое лечится только через диспетчер задач.
--lua
local hw = require'arduino'
hw.com = hw.get_port (2341, 8036) -- указать vid и pid ардуино
if hw.com < 1 then -- если номер порта меньше 1
log ('error = ' .. tostring(hw.com)) -- код ошибки, если 0 значит устройство с указанными vip и pid не найдено
end_script ()
end
log 'clear' log 'mode compact'
log('установить паузу между нажатиями клавиш мыши')
hw.set_delay_mouse (20) -- установить паузу между нажатиями клавиш мыши
log('\r\nустановить рандом между нажатиями клавиш мыши')
hw.set_random_delay_mouse(10) -- установить рандом между нажатиями клавиш мыши от 0 до 9 мсек
log('\r\nустановить шаг перемещения курсора')
hw.set_offset_mousemove(4) -- шаг перемещения курсора, чем больше тем быстрее перемещается
log('\r\nустановить паузу между каждый шагом перемещения мыши')
hw.set_delay_mousemove(2) -- установить паузу между каждый шагом перемещения мыши, чем меньше, тем быстрее перемещается
log(hw.offset_mousemove)
log(hw.delay_mousemove)
log(hw.delay_mouse )
log(hw.random_delay_mouse)
log('\r\nперемещение курсора')
hw.mouse.move (651, 225) -- переместить мышь
--lua
local hw = require'arduino'
hw.com = hw.get_port (2341, 8036) -- указать vid и pid ардуино
if hw.com < 1 then -- если номер порта меньше 1
log ('error = ' .. tostring(hw.com)) -- код ошибки, если 0 значит устройство с указанными vip и pid не найдено
end_script ()
end
log 'clear' log 'mode compact'
log('установить паузу между нажатиями клавиш мыши')
hw.set_delay_mouse (20) -- установить паузу между нажатиями клавиш мыши
log('\r\nустановить рандом между нажатиями клавиш мыши')
hw.set_random_delay_mouse(10) -- установить рандом между нажатиями клавиш мыши от 0 до 9 мсек
log('\r\nустановить шаг перемещения курсора')
hw.set_offset_mousemove(4) -- шаг перемещения курсора, чем больше тем быстрее перемещается
log('\r\nустановить паузу между каждый шагом перемещения мыши')
hw.set_delay_mousemove(2) -- установить паузу между каждый шагом перемещения мыши, чем меньше, тем быстрее перемещается
log(hw.offset_mousemove)
log(hw.delay_mousemove)
log(hw.delay_mouse )
log(hw.random_delay_mouse)
log('\r\nперемещение курсора')
hw.mouse.move (651, 225) -- переместить мышь
Попробуйте другие драйвера, они могут отличаться.
Перепробовал много разных драйверов результат один, либо сразу зависает либо на втором, третьем пуске.
Поставил win 7 с "родными" драйверами из ArduinoIDE работает более менее стабильно, если зациклить скрипт будет работать пока не отключишь. Драйвер из шапки не смог поставить.
А вот в ручную все же можно повесить порт или пилота - частым запуском, если не делать паузу в секунд 5, после посл вывода:
перемещение курсора
Открытие порта
Порт открыт
Закрытие порта: true
--lua
local ffi = require("ffi")
log 'clear' log 'mode compact'
local hw = ffi.load('Arduino.dll')
ffi.cdef[[
int get_port(int VID, int PID);
int set_port(int com);
int set_delay_mouse(int ms);
int set_delay_mousemove(int ms);
int set_offset_mousemove(int step);
int set_random_delay_mouse(int rand);
int mouse_move(int x, int y);
]]
local com = hw.get_port(2341, 8036)
hint('Номер порта: ' .. tostring(com))
if com < 1 then -- если номер порта меньше 1
log ('error = ' .. tostring(com)) -- код ошибки, если 0 значит устройство с указанными vip и pid не найдено
end_script ()
end
hw.set_port(com)
hw.set_delay_mouse (20) -- установить паузу между нажатиями клавиш мыши
hw.set_random_delay_mouse(10) -- установить рандом между нажатиями клавиш мыши от 0 до 9 мсек
hw.set_offset_mousemove(4) -- шаг перемещения курсора, чем больше тем быстрее перемещается
hw.set_delay_mousemove(2) -- установить паузу между каждый шагом перемещения мыши, чем меньше, тем быстрее перемещается
hw.mouse_move (651, 225) -- переместить мышь
--lua
local ffi = require("ffi")
local hw = ffi.load('Arduino.dll')
ffi.cdef[[
int get_port (int vid, int pid);
int set_port (int COMport);
int set_delay_key (int ms);
int set_delay_mouse (int ms);
int set_delay_mousemove(int ms);
int set_offset_mousemove(int step);
int set_random_delay_key(int rand);
int set_random_delay_mouse(int rand);
int key (int code);
int key_down (int code);
int key_up (int code);
int text (const char* text);
int mouse_move (int x, int y);
int mouse_click (int button);
int mouse_click_dbl (int button);
int mouse_left (int x, int y);
int mouse_right (int x, int y);
int mouse_middle (int x, int y);
int mouse_left_dbl (int x, int y);
int mouse_right_dbl (int x, int y);
int mouse_middle_dbl (int x, int y);
int mouse_left_down (int x, int y);
int mouse_right_down (int x, int y);
int mouse_middle_down (int x, int y);
int mouse_left_up (int x, int y);
int mouse_right_up (int x, int y);
int mouse_middle_up (int x, int y);
int mouse_drag_left (int x, int y, int x2, int y2);
int mouse_drag_right (int x, int y, int x2, int y2);
int mouse_wheel_up (int x, int y, int count);
int mouse_wheel_down (int x, int y, int count);
]]
Про Arduino.dll понятно, а модуль Arduino.lua из "сообщения 17", чем отличается от модуля из шапки?
Только выводом информации в лог об открытии закрытии порта или еще чем-то?
Его тоже можно использовать?
Подскажите пожалуйста как можно решить проблему крайне медленной работы на vmware workstation 16?
Фактически все работает но время выполнения просто огромное, на virtualbox такой проблемы нету вообще там все как на обычном пк все отрабатывает согласно задержкам
hw.com = hw.get_port (2341, 8036) -- указать vid и pid ардуино
--lua
require"luaposh";hw=require"arduino";log"clear"
hw.com = PScode('R',{[[$Return=Get-ArduinoPort]]})
if type(hw.com) ~= "number" then
log("ERROR\n"..hw.com)
end_script()
end
hw.mouse.move(400, 200)
hw.com = 3 -- 3й порт
Подскажите а как используя Arduino.dll
отправить нажатие кнопок
hw.key (hw.enter) -- нажать 'Enter'
hw.text ('Hello Привет') -- напечатать текст
hw.key ('V') -- нажать Shift+'v'
hw.key (0xB0)
hw.key ('k') -- нажать клавишу 'k'
--lua
local ffi = require("ffi")
local hw = ffi.load('Arduino.dll')
ffi.cdef[[
int get_port (int vid, int pid);
int get_port (int vid, int pid);
int set_port (int COMport);
int set_delay_key (int ms);
int set_delay_mouse (int ms);
int set_delay_mousemove(int ms);
int set_offset_mousemove(int step);
int set_random_delay_key(int rand);
int set_random_delay_mouse(int rand);
int key (int code);
int key_down (int code);
int key_up (int code);
int text (int text);
int mouse_move (int x, int y);
int mouse_click (int button);
int mouse_click_dbl (int button);
int mouse_left (int x, int y);
int mouse_right (int x, int y);
int mouse_middle (int x, int y);
int mouse_left_dbl (int x, int y);
int mouse_right_dbl (int x, int y);
int mouse_middle_dbl (int x, int y);
int mouse_left_down (int x, int y);
int mouse_right_down (int x, int y);
int mouse_middle_down (int x, int y);
int mouse_left_up (int x, int y);
int mouse_right_up (int x, int y);
int mouse_middle_up (int x, int y);
int mouse_drag_left (int x, int y, int x2, int y2);
int mouse_drag_right (int x, int y, int x2, int y2);
int mouse_wheel_up (int x, int y, int count);
int mouse_wheel_down (int x, int y, int count);
]]
local com = hw.get_port(2341, 8036)
--hint('Номер порта: ' .. tostring(com))
if com < 1 then -- если номер порта меньше 1
log ('error = ' .. tostring(com)) -- код ошибки, если 0 значит устройство с указанными vip и pid не найдено
end_script ()
end
hw.set_port(com)
hw.set_delay_mouse (95) -- установить паузу между нажатиями клавиш мыши
hw.set_random_delay_mouse(15) -- установить рандом между нажатиями клавиш мыши от 0 до 15 мсек
hw.set_offset_mousemove(6) -- шаг перемещения курсора, чем больше тем быстрее перемещается
hw.set_delay_mousemove(6) -- установить паузу между каждый шагом перемещения мыши, чем меньше, тем быстрее перемещается
hw.set_delay_key (325) -- установить задержку нажатий клавиатуры
hw.set_random_delay_key(95) -- рандом в мсек между нажатием и отпусканием клавиш клавиатуры
wait (3000 + math.random (20))
hw.key ('k') -- нажать
wait (75 + math.random (30))
hw.key (0xB0) -- нажать
wait (375 + math.random (30))
Сайт ардуино отправляет к этой табличке http://www.asciitable.com/ за доп кодами и их описанием.
Сейчас установлю arduino, попробую dll.
Пробуйте. cirus придёт, может что подправит.
local enter = 0xB0
function _key(symbol)
hw.key(symbol:byte())
end
_key('k') -- нажать k
_key('Z') -- нажать Shift+z
hw.key(enter) -- нажать enter
Спасибо да табличка с кодами решила проблемы а function _key(symbol) так вообще идеально.
Подскажите почему может не срабатывать рандом смешение у hw.mouse.move, пробовал такие варианты не срабатывает не один
local x, y = 37, 533, 50, 50, -50, -52
hw.mouse.move (x, y)
hw.mouse.move (37, 533, 50, 50, -50, -52)
hw.mouse.move (39, 537, 5, 10, -7, -12)
local x, y = mouse_pos ()
hw.mouse.left (x, y, 50, 50, -50, -50)
--lua
math.randomseed(os.clock())
function rand(x, y, x_plus, y_plus, x_minus, y_minus)
return x+math.random(x_minus, x_plus), y+math.random(y_minus, y_plus)
end
local x, y = rand(37, 533, 50, 50, -50, -52)
log (x, y)
Скажите, а такое написание:
hw.mouse.move (arr[1][1] + (1 + math.random (50), arr[1][2] + (1 + math.random (50))
допустимо, для "случайного" перемещения курсора?
hw.mouse.move (arr[1][1] + math.random (50), arr[1][2] + math.random (50))
math.randomseed(os.clock())
"Вернулась" проблема с не закрытием порта, которая вешает пилот.
Один и тот же скрипт может работать часами, а может подвесить пилота уже через 10-15 минут работы, пробовал на разных компьютерах, плюс минус поведение одинаковое.
Ребят подскажите как поставить драйвер из шапки в замен, стандартного драйвера от Arduino IDE.
Ручную остановку скрипта при "открытом порте" - усвоил и избегаю, а какие факторы (команды) в скрипте могут влиять на, не возможность закрытия порта?
Другими словами может ли сам скрипт не давать закрыть порт, соответственно подвешивать пилота?
Нужен минимальный код, который приводит к зависанию.
А зачем нам вообще этот драйвер из шапки, если у нас на плате нет преобразователей usb-uart, ведь он встроен в саму Atmega32u4?
Тоже периодически сталкивался с зависаниями но у меня не чистое подключение а проброс в виртуалки.
Из команд как по крайне мере мне показалось это все что связано с зажатиями hw.key_down ('h') отказался от них и вроде лучше
Так же не провереный на длинной дистанции но тоже непонятно почему дольще работает это покдлючение к порту а не hw.com = hw.get_port (2341, 8036) а hw.com = 6
И не dll а .lua через dll очень не долго работает
Пробовал и нам ram диск класть пилота но это вообще ничего не дало вроде
И конечно 10 винда сборок пробовал много разных остановился на 21h1 на 7 вообще печально все работает
Подскажите пожалуйста как сместить курсор в лево/право на 3 пикселя относительно позиции курсора, на просто lua работал такой вариант c ардуино не работает такое смешение влево/вправо всегда тянет вверх
wait (70 + math.random (100))
hw.mouse.move (1071, 472) -- было move_smooth (1071, 472)
wait (125 + math.random (20))
local x, y = mouse_pos ()
hw.mouse.right_down (x, y) -- было right_down (x, y)
wait (125 + math.random (20))
if color(1791, 610 ) == 3951049 then
local x, y = mouse_pos ()
clickoffsetx (3 + math.random (2))
hw.mouse.move (x, y) --было move_smooth (x, y)
local x, y = mouse_pos ()
end
local x, y = mouse_pos ()
hw.mouse.right_up (x, y) -- было right_up (x, y)
--lua
local hw = require'arduino'
hw.com = hw.get_port (2341, 8036) -- указать vid и pid ардуино
if hw.com < 1 then -- если номер порта меньше 1
log ('error = ' .. tostring(hw.com)) -- код ошибки, если 0 значит устройство с указанными vip и pid не найдено
end_script ()
end
local x, y = mouse_pos ()
hw.mouse.move (x+3, y) -- вправо на 3 пикселя
При работе через модуль луа такая конструкция работала
...
hw.mouse.move (arrP[1][1], arrP[1][2])
wait (300 + math.random (100))
hw.mouse.left_down () -- зажать левую кнопку мыши
wait (300 + math.random (100))
hw.mouse.move (arrP[1][1], arrP[1][2] + (2 + math.random (3)))
wait (300 + math.random (100))
hw.mouse.left_up () -- отжать левую кнопку мыши
...
клик (зажатие) проходил
При работе через dll уже, не работает
...
hw.mouse_move (arrP[1][1], arrP[1][2])
wait (300 + math.random (100))
hw.mouse_left_down () -- зажать левую кнопку мыши
wait (300 + math.random (100))
hw.mouse_move (arrP[1][1], arrP[1][2] + (2 + math.random (3)))
wait (300 + math.random (100))
hw.mouse_left_up () -- отжать левую кнопку мыши
...
Пилот ругается на не правильный аргумент в строке "hw.mouse_left_down () и hw.mouse_left_up ()", возможно ли сделать клик (зажатие, отпускание), в том месте где уже находится курсор?
Сам спросил, сам отвечу для моего применения можно просто удалить лишние строки в скрипте. Работать будет точно также как в первом варианте.
было
hw.mouse_move (arrP[1][1], arrP[1][2])
wait (300 + math.random (100))
hw.mouse_left_down () -- зажать левую кнопку мыши
wait (300 + math.random (100))
hw.mouse_move (arrP[1][1], arrP[1][2] + (2 + math.random (3)))
wait (300 + math.random (100))
hw.mouse_left_up () -- отжать левую кнопку мыши
hw.mouse_move (arrP[1][1], arrP[1][2])
wait (300 + math.random (100))
hw.mouse_left_down (arrP[1][1], arrP[1][2]) -- зажать левую кнопку мыши
--wait (300 + math.random (100))
--hw.mouse_move (arrP[1][1], arrP[1][2] + (2 + math.random (3)))
wait (300 + math.random (100))
hw.mouse_left_up (arrP[1][1], arrP[1][2] + (2 + math.random (3))) -- отжать левую кнопку мыши
int mouse_left_down (int x, int y);
--lua
local ffi = require("ffi")
local hw = ffi.load('Arduino.dll')
local MOUSE_LEFT = 1
local MOUSE_RIGHT = 2
local MOUSE_MIDDLE = 4
ffi.cdef[[
int get_port (int vid, int pid);
int set_port (int COMport);
int mouse_left (int x, int y);
int mouse_click (int button);
int mouse_left_down (int x, int y);
int mouse_left_up (int x, int y);
]]
local com = hw.get_port(2341, 8036)
--hint('Номер порта: ' .. tostring(com))
if com < 1 then -- если номер порта меньше 1
log ('error = ' .. tostring(com)) -- код ошибки, если 0 значит устройство с указанными vip и pid не найдено
end_script ()
end
hw.set_port(com)
wait(3000)
hw.mouse_click(MOUSE_LEFT) -- клик левой кнопкой мыши в текущих координатах
wait(2000)
local x, y = mouse_pos () -- получить текущие координаты курсора
hw.mouse_left_down (x, y) -- зажать левую кнопку мыши
wait(2000)
hw.mouse_left_up (x+300, y-100) -- отпустить левую кнопку мыши
"Обрамил" всё что возможно выводом в лог, получается следующие.
Пилот зависает (открывает порт без закрытия) всегда в одном и том же месте:
hw.set_port(com)
hw.set_delay_mouse (100) -- установить паузу между нажатиями клавиш мыши
hw.set_random_delay_mouse(50) -- установить рандом между нажатиями клавиш мыши
hw.set_offset_mousemove(5) -- шаг перемещения курсора, чем больше тем быстрее перемещается
hw.set_delay_mousemove(5) -- установить паузу между каждый шагом перемещения мыши, чем меньше, тем быстрее перемещается
hw.set_delay_key (300) -- установить задержку нажатий клавиатуры
hw.set_random_delay_key(10) -- рандом в мсек между нажатием и отпусканием клавиш клавиатуры
--lua
local hw = require'arduino'
hw.com = hw.get_port (2341, 8036) -- указать vid и pid ардуино
if hw.com < 1 then -- если номер порта меньше 1
log ('error = ' .. tostring(hw.com)) -- код ошибки, если 0 значит устройство с указанными vip и pid не найдено
end_script ()
end
local x, y = mouse_pos ()
hw.mouse.move (x+3, y) -- вправо на 3 пикселя
Замечена такая проблема, если подключать arduino после подключения нового findcolor вылетает ошибка
arduino.lua:208: bad argument #4 to 'CreateFileA' (cannot convert 'number' to 'struct 181 *')
если порядок изменить все ок.
Выкладывайте код, который вызывает ошибку.
--lua
log ('clear') log ('mode compact')
local ext = require('color')
local hw = require('arduino')
hw.com = hw.get_port (2341, 8036)
if hw.com < 1 then
log ('error = ' .. tostring(hw.com))
end_script ()
end
hw.set_delay_key (30)
hw.set_random_delay_key(10)
hw.set_delay_mouse (30)
hw.set_random_delay_mouse(10)
hw.set_offset_mousemove(10)
hw.set_delay_mousemove(2)
Обновил архив в первом посте, теперь не должно быть ошибки.
hw.set_port(com)
hw.set_delay_mouse (100) -- установить паузу между нажатиями клавиш мыши
hw.set_random_delay_mouse(50) -- установить рандом между нажатиями клавиш мыши
hw.set_offset_mousemove(5) -- шаг перемещения курсора, чем больше тем быстрее перемещается
hw.set_delay_mousemove(5) -- установить паузу между каждый шагом перемещения мыши, чем меньше, тем быстрее перемещается
hw.set_delay_key (300) -- установить задержку нажатий клавиатуры
hw.set_random_delay_key(10) -- рандом в мсек между нажатием и отпусканием клавиш клавиатуры
export_array.delay_key = 120 -- пауза между нажатиями клавиш. Только чтение, изменение через set_delay_key.
export_array.delay_mouse = 90 -- пауза между нажатием и отпусканием кнопок мыши. Только чтение, изменение через set_delay_mouse.
export_array.delay_mousemove = 35 -- пауза при перемещении курсора
export_array.offset_mousemove = 30 -- смещение курсора по x и y при перемещении мыши
export_array.random_delay_key = 0 -- рандом между нажатием и отпусканием клавиши клавиатуры
export_array.random_delay_mouse = 0 -- рандом между нажатием и отпусканием клавиши мыши
int KEYBOARD_DELAY = 120;
int MOUSE_DELAY = 90;
int MOUSE_MOVE_DELAY = 35;
int MOUSE_MOVE_OFFSET = 30;
int RANDOM_KEY = 30;
int RANDOM_MOUSE = 20;
hw.set_delay_mouse (100) -- установить паузу между нажатиями клавиш мыши
hw.set_random_delay_mouse(50) -- установить рандом между нажатиями клавиш мыши
hw.set_offset_mousemove(5) -- шаг перемещения курсора, чем больше тем быстрее перемещается
hw.set_delay_mousemove(5) -- установить паузу между каждый шагом перемещения мыши, чем меньше, тем быстрее перемещается
hw.set_delay_key (300) -- установить задержку нажатий клавиатуры
hw.set_random_delay_key(10) -- рандом в мсек между нажатием и отпусканием клавиш клавиатуры
export_array.delay_key = 120 -- пауза между нажатиями клавиш. Только чтение, изменение через set_delay_key.
export_array.delay_mouse = 90 -- пауза между нажатием и отпусканием кнопок мыши. Только чтение, изменение через set_delay_mouse.
export_array.delay_mousemove = 35 -- пауза при перемещении курсора
export_array.offset_mousemove = 30 -- смещение курсора по x и y при перемещении мыши
export_array.random_delay_key = 0 -- рандом между нажатием и отпусканием клавиши клавиатуры
export_array.random_delay_mouse = 0 -- рандом между нажатием и отпусканием клавиши мыши
int KEYBOARD_DELAY = 120;
int MOUSE_DELAY = 90;
int MOUSE_MOVE_DELAY = 35;
int MOUSE_MOVE_OFFSET = 30;
int RANDOM_KEY = 30;
int RANDOM_MOUSE = 20;
hw.set_delay_mouse (100) -- установить паузу между нажатиями клавиш мыши
hw.set_random_delay_mouse(50) -- установить рандом между нажатиями клавиш мыши
hw.set_offset_mousemove(5) -- шаг перемещения курсора, чем больше тем быстрее перемещается
hw.set_delay_mousemove(5) -- установить паузу между каждый шагом перемещения мыши, чем меньше, тем быстрее перемещается
hw.set_delay_key (300) -- установить задержку нажатий клавиатуры
hw.set_random_delay_key(10) -- рандом в мсек между нажатием и отпусканием клавиш клавиатуры
Подскажите пожалуйста можно ли каким то образом не прибегая к
hw.key_down hw.key_up
зажатию кнопок отправить содержимое буфера?
что то вроде
hw.key (hw.clipboard)
по сути просто контрл+v но без hw.key_down hw.key_up
local text = clipboard ()
hw.text (text)
так будет именно печатается все что в буфере
Проблема в том что у меня при использование
hw.key_down hw.key_up mouse.left_down mouse.right_down все что связано с зажатиями периодически виснит скрипт
В свзяи с чем может быть проблема?
в диспетчере устройств отображается корректно микро ком 8
в самом адруино выставил свою плату и порт
Гет порт вписал свой из "получить инф о плате"
20:41:23 6 (test.txt, 0): a runtime error.
59: attempt to call field 'Key' (a nil value)
--lua
local hw = require 'arduino'
hw.com = hw.get_port (2341, 8037) -- указать vid и pid ардуино
if hw.com < 1 then -- если номер порта меньше 1
log ('err
--lua
local hw = require 'arduino'
hw.com = hw.get_port (2341, 8037) -- указать vid и pid ардуино
if hw.com < 1 then -- если номер порта меньше 1
log ('error = ' .. tostring(hw.com)) -- код ошибки, если 0 значит устройство с указанными vip и pid не найдено
end_script ()
end
hw.set_delay_key (20) -- установить паузу между нажатиями клавиш клавиатуры
hw.set_random_delay_key(10) -- установить рандом между нажатием и отпускание клавиш от 0 до 9 мсек
-- т. е. между нажатием и отпусканием клавиши будет пауза от 20 до 29 мсек
wait(3000)
Приведённый код работает.
Подскажите как определить зажатие клавиш при использование ардуино
беру код с
https://forum.uokit.com/index.php?showtopic=68111&hl=%F1%EE%F1%F2%EE%FF%ED%E8%E5+%EA%EB%E0%E2%E8%F8%E8
--lua
log 'clear' log 'mode compact'
wait (627 + math.random (30))
--local hw = require'arduino'
math.randomseed(os.clock()) --функция рандома
function rand(x, y, x_plus, y_plus, x_minus, y_minus)
return x+math.random(x_minus, x_plus), y+math.random(y_minus, y_plus)
end --функция рандома
--проверка клавиш
do
local back = package.path
package.path = "luaPlugins\\winapi\\?.lua;"..package.path
setfenv(1, require'winapi')
require[[winapi.keyboard]]
package.path = back
end
--проверка клавиш
-- проверка нажата ли клавиша Z
while 1 do
local state = GetKeyState(90) -- или GetKeyState(0x5A)
if state then
log ("Z нажата")
else
log ("Z не нажата")
end
wait (100)
end
--lua
local ffi = require("ffi")
ffi.cdef[[ short GetAsyncKeyState(int vKey); ]]
log 'clear' log 'mode compact'
local hw = require'arduino'
-- проверка нажата ли клавиша Z
while 1 do
local state = ffi.C.GetAsyncKeyState(90)
if state ~= 0 then
log ("Z нажата")
else
log ("Z не нажата")
end
wait (100)
end
Большое спасибо
--lua
local ffi = require("ffi")
ffi.cdef[[ short GetAsyncKeyState(int vKey); ]]
log 'clear' log 'mode compact'
local hw = require'arduino'
-- проверка нажата ли клавиша Z
while 1 do
local state = ffi.C.GetAsyncKeyState(90)
if state ~= 0 then
log ("Z нажата")
else
log ("Z не нажата")
end
wait (100)
end
------------------------зажимаю правую
local x, y = mouse_pos ()
wait (325 + math.random (30))
hw.mouse.right_down (x, y) -- зажать правую в позиции
wait (325 + math.random (30))
------------------------зажимаю правую
-------------проверка что правая зажалась---------
local state = ffi.C.GetAsyncKeyState(2)
if state ~= 0 then
--log ("нажата")
else
------------------------зажимаю правую
local x, y = mouse_pos ()
wait (325 + math.random (30))
hw.mouse.right_down (x, y) -- зажать правую в позиции
wait (325 + math.random (30))
------------------------зажимаю правую
end
-------------проверка что правая зажалась---------
Привет.
Можете сказать как правильно составить команды для отправки через cmd
echo 2 text > COM7
echo 1 t > COM7
echo 5 (100,100) > COM7
echo 6 > COM7
В файле arduino.lua можно посмотреть что отправляет нужная функция.
echo 1116>COM7
echo 5++19660700>COM7
echo 61>COM7
echo 5++19660700>COM7
echo 025>COM7
echo 031>COM7
Спасибо за пояснения
А как нажимать кнопки с numpad'а? Есть что-то похожее на это: hw.key (hw.F1)? Или только кодами?
export_array.KEYPAD_4 = 228
local KEYPAD_4 = 228
hw.key (KEYPAD_4)
local KEYPAD_0 = 234
local KEYPAD_1 = 225
local KEYPAD_2 = 226
local KEYPAD_3 = 227
local KEYPAD_4 = 228
local KEYPAD_5 = 229
local KEYPAD_6 = 230
local KEYPAD_7 = 231
local KEYPAD_8 = 232
local KEYPAD_9 = 233
Добрый день. В первом посте написано, что работает только в активном окне. Kyja дальше в теме пишет про привязку к окну. Так можно все таки этот кликер к окну привязать?
Ctrl + A или findwindow, workwindow. Примеры https://uopilot.tati.pro/index.php?title=Workwindow_(Lua)
Подскажите пожалуйста почему происходит клик в 2 точки
то есть сначала идет клик в найденный пиксель все ок
а потом моментальный второй клик в другую точку
в настройках скетча ардуино стоит
int MOUSE_DELAY = 5;
int MOUSE_MOVE_DELAY = 35;
int MOUSE_MOVE_OFFSET = 30;
int RANDOM_KEY = 20;
int RANDOM_MOUSE = 0;
то есть второй клик именно моментален хотя в первый клик мышь едет плавно как по настройкам а вот второй резкий сразу как будто игнорируются настройки
int MOUSE_MOVE_DELAY = 35;
int MOUSE_MOVE_OFFSET = 30;
но и в целом второго клика по идее быть не должно
local Time = 32.235 --время работы таймера
local endTimer = os.clock() + Time while os.clock() <= endTimer do
local a = findcolor([[611, 462 1291, 677 1 1 ( 0xeeeeee-0xffffff ) %arr 2 -1 0]]) -- Цвет
if a > 0 then -- если найден цвет
wait (1095 + math.random (30))
log (arr [1][1])
log (arr [1][2])
hw.mouse.left (arr [1][1], arr [1][2])
log (arr [1][1])
log (arr [1][2])
wait (1095 + math.random (30))
goto end_this_find
end
if color(1722, 638 ) ~= 16777215 then --нет каста
wait (585 + math.random (30))
break
end
end
::end_this_find::
Нужна плата с контролером ATmega32u4.
А работа с другими платами возможна с uopilot?
У меня плата микро-контроллера Atmega328
Печально
Добрый вечер, продолжил эпопею с Arduino. Она заработала, но вот выполняется скрипт 1 раз. А как его можно N ое раз повторить ?
В цикле while, for.
for #i 1 10
wait (3000)
hw.key (0xC2)
end_for
Потому что синтаксис должен быть Lua.
--lua
for i =1, 10 do
-- ваш код
end
--lua
for i =1, 10 do
-- ваш код
end
Я пока не понимаю ничего в arduino.
И совсем не понимаю в модуле lua.
Но нашел в интернете такую штуку, которая вроде дешевле чем ардуино в 2 раза. Програмируется так же через ide arduino.
https://aliexpress.ru/popular/digispark.html
С этим будет работать?
В Интернете пишут, что мыш и клаву оно умеет эмулировать
Это бы лучше у ардуинщиков спросить. Цена вопроса 100р - можно затестить.
На 11 винде кто-то пользуется? Перебрал кучу дров разных эффекта ноль. На 10ке эта плата работает.
Я так понял ардуино не умеет в мультиоконку и может кликать только в открытое окно?
Чет не понятно, кому вообще нужен кликер под одно окно? Проще тогда использовать обычные макросные мыши ( x7, razer и тд) Они то же самое могут. Зачем с этим ардуино заморачиваться...
Да, но сам комфорт использования...так и ssd диск можно использовать, напрямую плату подключить и все. а если часто нужно вне дома использовать ? без корпуса никак, имхо.
Тяжело представляю зачем этот девайс нужно таскать куда-то регулярно с собой. Ну если прям кому-то нужно, то подойдет любая коробка и усб удлинитель. Либо залить эпоксидкой и жить счастливо. Хочется красиво - купить в корпусе. ИМХО очень частные случаи. Гораздо важднее то, что у людей на 11 винде вопросы возникли.
Привет, далек от всего этого, у меня лишь вопрос, при выполнении инструкции в первом сообщении любой код, запущенный в УО пилоте должен отрабатывать через имитацию нажатий клавиатуры? или нужны какие-то дополнительные манипуляции
У вас появляется новый метод эмуляции. Подробнее можете посмотреть в первом сообщении в спойлере "список функций".
А если поставить эмулятор ком портов и попробовать отправить и принять с них что-нибудь? Понять проблема в самих ком портах при работе с луа или железке.
librs232lua
вот такая либа еще есть для ком портов
COMport = ffi.cast('int', ffi.C.CreateFileA('\\.\\COM' .. tostring(export_array.com), GENERIC_READ + GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, nil))
попробуй заменить на
COMport = ffi.cast('int', ffi.C.CreateFileA('\\.\\COM' .. tostring(export_array.com)..":", GENERIC_READ + GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, nil))
двоеточие после порта добавлено
так же в тестовом режиме попробуй отослать ручками на железку через
io.open("COM123:", "wb")
а нормальным методом не моргала? эмуляцию при этом железка выполнила?
--lua
local hw = require'arduino'
hw.com = hw.get_port (2341, 8036) -- указать vid и pid ардуино
if hw.com < 1 then -- если номер порта меньше 1
log('error = ' .. tostring(hw.com)) -- код ошибки
end_script ()
else
log(hw.com)
end
log(1)
hw.mouse.move(100,100)
log(2)
А через мой дебаг запускал? На какой строке в arduino.lua зависает? Ну либо сам найди номер строки. Там проще будет. Я то думал, что скрипт работает, а железка просто игнорит команды - это сложно без железки диагностировать, а тут уже есть с чем работать.
Мне чет кажется оно будет бесконечно крутить:
repeat
COMport = ffi.cast('int', ffi.C.CreateFileA('\\.\\COM' .. tostring(export_array.com), GENERIC_READ + GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, nil))
if COMport == INVALID_HANDLE_VALUE then wait (1) end
until COMport ~= INVALID_HANDLE_VALUE
repeat
COMport = ffi.cast('int', ffi.C.CreateFileA('\\.\\COM' .. tostring(export_array.com), GENERIC_READ + GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, nil))
if COMport == INVALID_HANDLE_VALUE then wait (1) end
until COMport ~= INVALID_HANDLE_VALUE
порт открыть он не может. Попробуй ручками дописать номер порта вместо tostring(export_array.com) либо вообще задать порт строкой, можно попробовать задать его аналогично io.open
открыть он не может порт этот.
так же было бы совсем не лишним посмотреть правильно ли он находит номер порта и вывести в лог export_array.com
https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilea
тут можно почитать про параметры с которыми можно поиграть.
хочу предостеречь про \\.\ - без этого НЕ должно работать для портов выше COM9. По сути для 1-9 происходит преобразование в полный путь. Для портов с бОльшими номерами его нет.
попробуй такой префикс:
\\\\.\\
\\\\.\\ Так же работает.
Это была ошибка изначально.
Там должно быть вообще:
\\.\COM*
но все \ нужно удваивать для экранирования. Соответственно в одном месте был экран, во втором нет.
Cirus, поправь, пожалуйста исходник. Я могу перезалить, но только в свой отдельный пост.
извездочка подразумевалась под замену номером порта.
--lua
local key = {
mouse_1 = 0x01, -- VK_LBUTTON Left mouse button
mouse_2 = 0x02, -- VK_RBUTTON Right mouse button
--0x03 -- VK_CANCEL Control-break processing
mouse_middle = 0x04, -- VK_MBUTTON Middle mouse button (three-button mouse)
mouse_4 = 0x05, -- VK_XBUTTON1 X1 mouse button
mouse_5 = 0x06, -- VK_XBUTTON2 X2 mouse button
--0x07 -- Undefined
backspace = 0x08, -- VK_BACK BACKSPACE key
tab = 0x09, -- VK_TAB TAB key
--0x0A-0B -- Reserved
--0x0C -- VK_CLEAR CLEAR key
enter = 0x0D, -- VK_RETURN ENTER key
--0x0E-0F -- Undefined
shift = 0x10, -- VK_SHIFT SHIFT key
ctrl = 0x11, -- VK_CONTROL CTRL key
alt = 0x12, -- VK_MENU ALT key
pause = 0x13, -- VK_PAUSE PAUSE key
caps_lock = 0x14, -- VK_CAPITAL CAPS LOCK key
--0x15 -- VK_KANA IME Kana mode
--0x15 -- VK_HANGUEL IME Hanguel mode (maintained for compatibility; use VK_HANGUL)
--0x15 -- VK_HANGUL IME Hangul mode
--0x16 -- Undefined
--0x17 -- VK_JUNJA IME Junja mode
--0x18 -- VK_FINAL IME final mode
--0x19 -- VK_HANJA IME Hanja mode
--0x19 -- VK_KANJI IME Kanji mode
--0x1A -- Undefined
esc = 0x1B, -- VK_ESCAPE ESC key
escape = 0x1B, -- VK_ESCAPE ESC key
--0x1C -- VK_CONVERT IME convert
--0x1D -- VK_NONCONVERT IME nonconvert
--0x1E -- VK_ACCEPT IME accept
--0x1F -- VK_MODECHANGE IME mode change request
spacebar = 0x20, -- VK_SPACE SPACEBAR
page_up = 0x21, -- VK_PRIOR PAGE UP key
page_down = 0x22, -- VK_NEXT PAGE DOWN key
["end"] = 0x23, -- VK_END END key
_end = 0x23, -- VK_END END key
home = 0x24, -- VK_HOME HOME key
left = 0x25, -- VK_LEFT LEFT ARROW key
up = 0x26, -- VK_UP UP ARROW key
right = 0x27, -- VK_RIGHT RIGHT ARROW key
down = 0x28, -- VK_DOWN DOWN ARROW key
--0x29 -- VK_SELECT SELECT key
--0x2A -- VK_PRINT PRINT key
--0x2B -- VK_EXECUTE EXECUTE key
print_screen = 0x2C, -- VK_SNAPSHOT PRINT SCREEN key
insert = 0x2D, -- VK_INSERT INS key
delete = 0x2E, -- VK_DELETE DEL key
--0x2F -- VK_HELP HELP key
["0"] = 0x30, -- 0 key
["1"] = 0x31, -- 1 key
["2"] = 0x32, -- 2 key
["3"] = 0x33, -- 3 key
["4"] = 0x34, -- 4 key
["5"] = 0x35, -- 5 key
["6"] = 0x36, -- 6 key
["7"] = 0x37, -- 7 key
["8"] = 0x38, -- 8 key
["9"] = 0x39, -- 9 key
--0x3A-40 -- Undefined
a = 0x41, -- A key
b = 0x42, -- B key
c = 0x43, -- C key
d = 0x44, -- D key
e = 0x45, -- E key
f = 0x46, -- F key
g = 0x47, -- G key
h = 0x48, -- H key
i = 0x49, -- I key
j = 0x4A, -- J key
k = 0x4B, -- K key
l = 0x4C, -- L key
m = 0x4D, -- M key
n = 0x4E, -- N key
o = 0x4F, -- O key
p = 0x50, -- P key
q = 0x51, -- Q key
r = 0x52, -- R key
s = 0x53, -- S key
t = 0x54, -- T key
u = 0x55, -- U key
v = 0x56, -- V key
w = 0x57, -- W key
x = 0x58, -- X key
y = 0x59, -- Y key
z = 0x5A, -- Z key
A = 0x41, -- A key
B = 0x42, -- B key
C = 0x43, -- C key
D = 0x44, -- D key
E = 0x45, -- E key
F = 0x46, -- F key
G = 0x47, -- G key
H = 0x48, -- H key
I = 0x49, -- I key
J = 0x4A, -- J key
K = 0x4B, -- K key
L = 0x4C, -- L key
M = 0x4D, -- M key
N = 0x4E, -- N key
O = 0x4F, -- O key
P = 0x50, -- P key
Q = 0x51, -- Q key
R = 0x52, -- R key
S = 0x53, -- S key
T = 0x54, -- T key
U = 0x55, -- U key
V = 0x56, -- V key
W = 0x57, -- W key
X = 0x58, -- X key
Y = 0x59, -- Y key
Z = 0x5A, -- Z key
win = 0x5B, -- VK_LWIN Left Windows key (Natural keyboard)
--0x5C -- VK_RWIN Right Windows key (Natural keyboard)
--0x5D -- VK_APPS Applications key (Natural keyboard)
--0x5E -- Reserved
sleep = 0x5F, -- VK_SLEEP Computer Sleep key
num_0 = 0x60, -- VK_NUMPAD0 Numeric keypad 0 key
num_1 = 0x61, -- VK_NUMPAD1 Numeric keypad 1 key
num_2 = 0x62, -- VK_NUMPAD2 Numeric keypad 2 key
num_3 = 0x63, -- VK_NUMPAD3 Numeric keypad 3 key
num_4 = 0x64, -- VK_NUMPAD4 Numeric keypad 4 key
num_5 = 0x65, -- VK_NUMPAD5 Numeric keypad 5 key
num_6 = 0x66, -- VK_NUMPAD6 Numeric keypad 6 key
num_7 = 0x67, -- VK_NUMPAD7 Numeric keypad 7 key
num_8 = 0x68, -- VK_NUMPAD8 Numeric keypad 8 key
num_9 = 0x69, -- VK_NUMPAD9 Numeric keypad 9 key
["num_*"] = 0x6A,
num_multiply = 0x6A, -- VK_MULTIPLY Multiply key
["num_+"] = 0x6B,
num_plus = 0x6B, -- VK_ADD Add key
--0x6C -- VK_SEPARATOR Separator key
["num_-"] = 0x6D,
num_minus = 0x6D, -- VK_SUBTRACT Subtract key
["num_."] = 0x6E,
num_del = 0x6E, -- VK_DECIMAL Decimal key
["num_/"] = 0x6F,
num_devide = 0x6F,
num_slash = 0x6F, -- VK_DIVIDE Divide key
F1 = 0x70, -- VK_F1 F1 key
F2 = 0x71, -- VK_F2 F2 key
F3 = 0x72, -- VK_F3 F3 key
F4 = 0x73, -- VK_F4 F4 key
F5 = 0x74, -- VK_F5 F5 key
F6 = 0x75, -- VK_F6 F6 key
F7 = 0x76, -- VK_F7 F7 key
F8 = 0x77, -- VK_F8 F8 key
F9 = 0x78, -- VK_F9 F9 key
F10 = 0x79, -- VK_F10 F10 key
F11 = 0x7A, -- VK_F11 F11 key
F12 = 0x7B, -- VK_F12 F12 key
F13 = 0x7C, -- VK_F13 F13 key
F14 = 0x7D, -- VK_F14 F14 key
F15 = 0x7E, -- VK_F15 F15 key
F16 = 0x7F, -- VK_F16 F16 key
F17 = 0x80, -- VK_F17 F17 key
F18 = 0x81, -- VK_F18 F18 key
F19 = 0x82, -- VK_F19 F19 key
F20 = 0x83, -- VK_F20 F20 key
F21 = 0x84, -- VK_F21 F21 key
F22 = 0x85, -- VK_F22 F22 key
F23 = 0x86, -- VK_F23 F23 key
F24 = 0x87, -- VK_F24 F24 key
f1 = 0x70, -- VK_F1 F1 key
f2 = 0x71, -- VK_F2 F2 key
f3 = 0x72, -- VK_F3 F3 key
f4 = 0x73, -- VK_F4 F4 key
f5 = 0x74, -- VK_F5 F5 key
f6 = 0x75, -- VK_F6 F6 key
f7 = 0x76, -- VK_F7 F7 key
f8 = 0x77, -- VK_F8 F8 key
f9 = 0x78, -- VK_F9 F9 key
f10 = 0x79, -- VK_F10 F10 key
f11 = 0x7A, -- VK_F11 F11 key
f12 = 0x7B, -- VK_F12 F12 key
f13 = 0x7C, -- VK_F13 F13 key
f14 = 0x7D, -- VK_F14 F14 key
f15 = 0x7E, -- VK_F15 F15 key
f16 = 0x7F, -- VK_F16 F16 key
f17 = 0x80, -- VK_F17 F17 key
f18 = 0x81, -- VK_F18 F18 key
f19 = 0x82, -- VK_F19 F19 key
f20 = 0x83, -- VK_F20 F20 key
f21 = 0x84, -- VK_F21 F21 key
f22 = 0x85, -- VK_F22 F22 key
f23 = 0x86, -- VK_F23 F23 key
f24 = 0x87, -- VK_F24 F24 key
--0x88-8F -- Unassigned
num_lock = 0x90, -- VK_NUMLOCK NUM LOCK key
scroll_lock = 0x91, -- VK_SCROLL SCROLL LOCK key
--0x92-96 -- OEM specific
--0x97-9F -- Unassigned
shift_left = 0xA0, -- VK_LSHIFT Left SHIFT key
shift_right = 0xA1, -- VK_RSHIFT Right SHIFT key
ctrl_left = 0xA2, -- VK_LCONTROL Left CONTROL key
ctrl_right = 0xA3, -- VK_RCONTROL Right CONTROL key
menu_left = 0xA4, -- VK_LMENU Left MENU key
menu_right = 0xA5, -- VK_RMENU Right MENU key
browser_back = 0xA6, -- VK_BROWSER_BACK Browser Back key
browser_forward = 0xA7, -- VK_BROWSER_FORWARD Browser Forward key
browser_refresh = 0xA8, -- VK_BROWSER_REFRESH Browser Refresh key
browser_stop = 0xA9, -- VK_BROWSER_STOP Browser Stop key
browser_search = 0xAA, -- VK_BROWSER_SEARCH Browser Search key
browser_favorites = 0xAB, -- VK_BROWSER_FAVORITES Browser Favorites key
browser_home = 0xAC, -- VK_BROWSER_HOME Browser Start and Home key
mute = 0xAD, -- VK_VOLUME_MUTE Volume Mute key
volume_down = 0xAE, -- VK_VOLUME_DOWN Volume Down key
volume_up = 0xAF, -- VK_VOLUME_UP Volume Up key
media_next = 0xB0, -- VK_MEDIA_NEXT_TRACK Next Track key
media_prev = 0xB1, -- VK_MEDIA_PREV_TRACK Previous Track key
media_stop = 0xB2, -- VK_MEDIA_STOP Stop Media key
media_play = 0xB3, -- VK_MEDIA_PLAY_PAUSE Play/Pause Media key
media_pasue = 0xB3, -- VK_MEDIA_PLAY_PAUSE Play/Pause Media key
launch_mail = 0xB4, -- VK_LAUNCH_MAIL Start Mail key
launch_media = 0xB5, -- VK_LAUNCH_MEDIA_SELECT Select Media key
launch_app_1 = 0xB6, -- VK_LAUNCH_APP1 Start Application 1 key
launch_app_2 = 0xB6, -- VK_LAUNCH_APP1 Start Application 2 key
--0xB8-B9 -- Reserved
[";"] = 0xBA, -- VK_OEM_1 Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the ';:' key
[":"] = 0xBA, -- VK_OEM_1 Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the ';:' key
["+"] = 0xBB, -- VK_OEM_PLUS For any country/region, the '+' key
[","] = 0xBC, -- VK_OEM_COMMA For any country/region, the ',' key
["-"] = 0xBD, -- VK_OEM_MINUS For any country/region, the '-' key
["."] = 0xBE, -- VK_OEM_PERIOD For any country/region, the '.' key
["/"] = 0xBF, -- VK_OEM_2 Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the '/?' key
["?"] = 0xBF, -- VK_OEM_2 Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the '/?' key
["`"] = 0xC0, -- VK_OEM_3 Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the '`~' key
["~"] = 0xC0, -- VK_OEM_3 Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the '`~' key
--0xC1-D7 -- Reserved
--0xD8-DA -- Unassigned
["["] = 0xDB, -- VK_OEM_4 Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the '[{' key
["{"] = 0xDB, -- VK_OEM_4 Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the '[{' key
["\\"] = 0xDC, -- VK_OEM_5 Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the '\|' key
["|"] = 0xDC, -- VK_OEM_5 Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the '\|' key
["]"] = 0xDD, -- VK_OEM_6 Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the ']}' key
["}"] = 0xDD, -- VK_OEM_6 Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the ']}' key
["'"] = 0xDE, -- VK_OEM_7 Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the 'single-quote/double-quote' key
['"'] = 0xDE, -- VK_OEM_7 Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the 'single-quote/double-quote' key
--0xDF -- VK_OEM_8 Used for miscellaneous characters; it can vary by keyboard.
--0xDF -- VK_OEM_8 Used for miscellaneous characters; it can vary by keyboard.
--0xE0 -- Reserved
--0xE1 -- OEM specific
--0xE2 -- VK_OEM_102 Either the angle bracket key or the backslash key on the RT 102-key keyboard
--0xE3-E4 -- OEM specific
--0xE5 -- VK_PROCESSKEY IME PROCESS key
--0xE6 -- OEM specific
--0xE7 -- VK_PACKET Used to pass Unicode characters as if they were keystrokes.
-- The VK_PACKET key is the low word of a 32-bit Virtual Key value used for non-keyboard input methods.
-- For more information, see Remark in KEYBDINPUT, SendInput, WM_KEYDOWN, and WM_KEYUP
--0xE8 -- Unassigned
--0xE9-F5 -- OEM specific
--0xF6 -- VK_ATTN Attn key
--0xF7 -- VK_CRSEL CrSel key
--0xF8 -- VK_EXSEL ExSel key
--0xF9 -- VK_EREOF Erase EOF key
play = 0xFA, -- VK_PLAY Play key
zoom = 0xFB, -- VK_ZOOM Zoom key
--0xFC -- VK_NONAME Reserved
--0xFD -- VK_PA1 PA1 key
--0xFE -- VK_OEM_CLEAR Clear key
}
return key
--lua
local dbg = require[[lua_plugins\mydbg]]
local ffi = require[[ffi]]
local rmem = ffi.cast
print = log
print "clear"
print "mode compact"
local cfg, fi, open, click = {},{},{},{}
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
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
Коды не те, но я нашёл https://forum.arduino.cc/t/transmitting-non-standard-keys/672233/2
Для / и * с нумпада это 0xDC и 0xDD.
Но я так и не понял зачем это в файле arduino.lua: export_array["end"] = 0xD5 и как это написать в скрипте. hw.key (hw. а дальше что? Я просто не в курсе синтаксиса, но пробовал разные варианты - ничего не работает.
Здравствуйте. Все сделал как в инструкции на 1 странице. Но непонятно что писать в скрипте самого UO Pilot? -lua он не читает если тупо скопировать туда текст из вкладки "Пример использования клавиатуры"
Задача: Нужно настроить срабатывания макроса на кнопке F3, чтобы персонаж в окне брало ассист и атаковал цель.
Спасибо.
Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)