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

3 страниц V  1 2 3 >  
Ответить в эту темуОткрыть новую тему
> Arduino, Нажатия мыши и клавиатуры в обход защиты от кликеров
cirus
сообщение 14.12.2020, 0:24
Сообщение #1


**********

Elder
Сообщений: 3.147
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 20019
Пользователь №: 16.971
Возраст: 29



Скетч и модуль lua:    Прикрепленный файл  arduino.zip ( 7,07 килобайт ) Кол-во скачиваний: 48
Драйвер для ардуино: Прикрепленный файл  CH341SER.zip ( 185,9 килобайт ) Кол-во скачиваний: 42

Arduino позволяет эмулировать нажатия клавиш клавиатуры и мыши, в том числе в приложениях, которые блокируют нажатия кликеров.
Может поворачивать камеру в шутерах и играх, в которых камера поворачивается с зажатой правой кнопкой мыши.
Дополнительная информация по обходу защиты в MMORPG.
Работает только с активным окном.


Необходимое устройство и установка ПО

1. Требуется плата Arduino micro или Arduino Leonardo. Заказать можно на Aliexpress.
2. Скачать и установить Arduino IDE. https://www.arduino.cc/en/software (Windows Win7 and newer)
3. Скачать и установить драйвер CH341SER (ссылка вначале темы).
4. Открыть Arduino IDE, пункт меню 'Инструменты', выбрать тип платы и порт.
5. Скачать архив arduino.zip (ссылка вначале темы) и извлечь его.
Файл arduino.lua закинуть в папку, в которой находится exe пилота.
Скетч загрузить в ардуино. Для этого скопировать содержимое файла Скетч.txt, вставить в Arduino IDE, нажать кнопку 'Загрузка'.

Требования

Пилот версии 2.41 или выше. Запускать от администратора.
Для работы функций мыши нужно в настройках мыши снять галочку 'Включить повышенную точность установки указателя'.
В функцию get_port (2341, 8036) нужно передавать vid и pid ардуино. Узнать их можно в Arduino IDE, пункт меню 'Инструменты', 'Получить информацию о плате'.
При переполнении буфера, хотя такого не должно быть, 3 секунды будет гореть встроенный светодиод L. В этом случае нужно увеличить паузы между нажатиями клавиш мыши/клавиатуры.
Все координаты в командах мыши указывать абсолютные, т. е. относительно левого верхнего угла экрана.

Список функций

get_port (vid, pid) -- узнать в каком com порте находится ардуино

set_delay_key (ms) -- установить задержку нажатий клавиатуры
set_delay_mouse (ms) -- установить задержку нажатий мыши
set_delay_mousemove(ms) -- установить паузу в мсек между каждым шагом перемещения курсора, чем меньше, тем быстрее перемещается курсор
set_offset_mousemove(step) -- шаг перемещения курсора от 1 до 127, чем больше, тем быстрее перемещается курсор.
set_random_delay_key(random) -- рандом в мсек между нажатием и отпусканием клавиш клавиатуры
set_random_delay_mouse(random) -- рандом в мсек между нажатием и отпусканием клавиш

key (code) -- нажать клавишу клавиатуры
text (text) -- отослать текст, в том числе русские символы
key_down (code) -- зажать (не отжимая) клавишу клавиатуры
key_up (code) -- отжать клавишу клавиатуры

mouse.move (x, y) -- переместить мышь
mouse.click (x, y, button) -- кликнуть мышью, button должен содержать код клавиши мыши (смотреть список клавиш)
mouse.left (x, y) -- клик левой кнопкой
mouse.right (x, y) -- клик правой кнопкой
mouse.middle (x, y) -- клик средней кнопкой
mouse.dbl (x, y, button) -- двойной клик, button должен содержать код клавиши мыши
mouse.left_dbl (x, y) -- двойной клик левой кнопкой мыши
mouse.right_dbl (x, y) -- двойной клик правой кнопкой мыши
mouse.middle_dbl (x, y) -- двойной клик средней кнопкой мыши
mouse.down (x, y, button) -- зажать (не отжимая) кнопку мыши, button должен содержать код клавиши мыши
mouse.left_down (x, y) -- зажать (не отжимая) левую кнопку мыши
mouse.right_down (x, y) -- зажать (не отжимая) правую кнопку мыши
mouse.middle_down (x, y) -- зажать (не отжимая) среднюю кнопку мыши
mouse.up (x, y, button) -- отжать кнопку мыши, button должен содержать код клавиши мыши
mouse.left_up (x, y) -- отжать левую кнопку мыши
mouse.right_up (x, y) -- отжать правую кнопку мыши
mouse.middle_up (x, y) -- отжать среднюю кнопку мыши
mouse.drag (x, y, x2, y2) -- зажать левую кнопку мыши в точке x y, переместить в точку x2 y2
mouse.wheel_up (x, y, count) -- прокручивание колёсика мыши вверх, count - насколько щелчков прокрутить
mouse.wheel_down (x, y, count) -- прокручивание колёсика мыши вниз, count - насколько щелчков прокрутить

Список многосимвольных клавиш

mouse_left_button = 1
mouse_right_button = 2
mouse_middle_button = 4

left_ctrl = 0x80
left_shift = 0x81
left_alt = 0x82
left_gui = 0x83
right_ctrl = 0x84
right_shift = 0x85
right_alt = 0x86
right_gui = 0x87
up_arrow = 0xDA
down_arrow = 0xD9
left_arrow = 0xD8
right_arrow = 0xD7
backspace = 0xB2
tab = 0xB3
enter = 0xB0
esc = 0xB1
insert = 0xD1
delete = 0xD4
page_up = 0xD3
page_down = 0xD6
home = 0xD2
["end"] = 0xD5
caps_lock = 0xC1
f1 = 0xC2
f2 = 0xC3
f3 = 0xC4
f4 = 0xC5
f5 = 0xC6
f6 = 0xC7
f7 = 0xC8
f8 = 0xC9
f9 = 0xCA
f10 = 0xCB
f11 = 0xCC
f12 = 0xCD
F1 = 0xC2
F2 = 0xC3
F3 = 0xC4
F4 = 0xC5
F5 = 0xC6
F6 = 0xC7
F7 = 0xC8
F8 = 0xC9
F9 = 0xCA
F10 = 0xCB
F11 = 0xCC
F12 = 0xCD

Пример использования клавиатуры

Код
--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)   -- отпустить левую кнопку мыши



Сообщение отредактировал Fors1k - 14.12.2020, 20:00
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 14.12.2020, 1:22
Сообщение #2


***********

Модератор UOPilot
Сообщений: 8.730
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 25696
Пользователь №: 11.279



Описание требований к арудино/закидывание скетчей и т.д. рекомендую взять из старой темы. Без этого боюсь людям будет сложно, а по разным темам растаскивать тяжело ориентироваться, да и пост может человек почистить и получится нехорошо.

Сообщение отредактировал DarkMaster - 14.12.2020, 1:23


--------------------
Скрипты под заказ.
Консультации по UOpilot 12$/час.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 17.12.2020, 18:38
Сообщение #3


*****

Старший модератор UO Pilot
Сообщений: 474
Регистрация: 19.12.2017
Группа: Модераторы
Наличность: 3365
Пользователь №: 18.746



На случай если будет лень вбивать 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(400200)


Сообщение отредактировал Fors1k - 12.1.2021, 17:14


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
KotMC
сообщение 10.1.2021, 0:42
Сообщение #4


**

Neophyte
Сообщений: 29
Регистрация: 10.1.2021
Группа: Пользователи
Наличность: 108
Пользователь №: 19.851
Возраст: 36



Скачал UO Pilot v2.41 (31.12.2018),Скетч и модуль lua.
Записал скетч в ардуино, положил модуль в папку с пилотом. Произвел рекомендуемые настройки.
Запускаю скрипт:

скрипт

--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 мсек


::me::
wait (3000) -- пауза 3 секунды чтобы переключиться на нужное окно
hw.key ('k') -- нажать клавишу 'k'
hw.key (hw.enter) -- нажать 'Enter'

goto me


Перехожу в блокнот и ничего не происходит в окне лога пилота только постоянно выводится
"0:13:59 0 (test.txt, 0): wait 1"

помогите найти ошибку.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 10.1.2021, 0:57
Сообщение #5


**********

Elder
Сообщений: 3.147
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 20019
Пользователь №: 16.971
Возраст: 29



Ардуино micro или leonardo?
Номер порта ардуино правильно определяется?
Код
hw.com = hw.get_port (2341, 8036) -- указать vid и pid ардуино
log(hw.com)  -- в логе номер порта, в котором ардуино

Перезагрузите пк или перезапустите пилот.
Для теста уберите лишние строки начиная с конца и посмотрите какая именно строка не выполняется.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
KotMC
сообщение 10.1.2021, 1:19
Сообщение #6


**

Neophyte
Сообщений: 29
Регистрация: 10.1.2021
Группа: Пользователи
Наличность: 108
Пользователь №: 19.851
Возраст: 36



pro micro.
Если использовать этот скрипт

скрипт
--lua
local ffi = require('ffi')
local setupapi = ffi.load('SetupAPI.dll')
local advapi32 = ffi.load('Advapi32.dll')

local DIGCF_ALLCLASSES = 4
local DIGCF_PRESENT = 2
local SPDRP_HARDWAREID = 1
local DICS_FLAG_GLOBAL = 1
local DIREG_DEV = 1
local KEY_READ = 131097
local BUFF_LEN = 20
local ERROR_SUCCESS = 0
local REG_SZ = 1

ffi.cdef[[
struct HWND__ { int unused; }; typedef struct HWND__ *HWND;
struct HKEY__ { int unused; }; typedef struct HKEY__ *HKEY;
typedef HKEY *PHKEY;
typedef unsigned long ULONG;
typedef unsigned long DWORD;
typedef DWORD *LPDWORD;
typedef long LONG;
typedef DWORD *PDWORD;
typedef unsigned char BYTE;
typedef BYTE *PBYTE, *LPBYTE;
typedef wchar_t WCHAR;
typedef const char *LPCSTR, *PCSTR;
typedef unsigned long ULONG_PTR, *PULONG_PTR;
typedef void *PVOID;
typedef PVOID HDEVINFO;
typedef ULONG DEVPROPTYPE;
typedef LONG LSTATUS;
typedef DWORD ACCESS_MASK;
typedef ACCESS_MASK REGSAM;

typedef struct _GUID {unsigned long Data1; unsigned short Data2; unsigned short Data3; unsigned char Data4[8];} GUID;
typedef struct _SP_DEVINFO_DATA {DWORD cbSize; GUID ClassGuid; DWORD DevInst; ULONG_PTR Reserved;} SP_DEVINFO_DATA, *PSP_DEVINFO_DATA;

HDEVINFO SetupDiGetClassDevsA(const GUID *ClassGuid, PCSTR Enumerator, HWND hwndParent, DWORD Flags);
bool SetupDiDestroyDeviceInfoList(HDEVINFO DeviceInfoSet);
bool SetupDiEnumDeviceInfo(HDEVINFO DeviceInfoSet, DWORD MemberIndex, PSP_DEVINFO_DATA DeviceInfoData);
bool SetupDiGetDeviceRegistryPropertyA(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData, DWORD Property,
PDWORD PropertyRegDataType, PBYTE PropertyBuffer, DWORD PropertyBufferSize, PDWORD RequiredSize);
HKEY SetupDiOpenDevRegKey(HDEVINFO DeviceInfoSet, PSP_DEVINFO_DATA DeviceInfoData,
DWORD Scope, DWORD HwProfile, DWORD KeyType, REGSAM samDesired);
LSTATUS RegCloseKey(HKEY hKey);
LSTATUS RegQueryValueExA(HKEY hKey, LPCSTR lpValueName, LPDWORD lpReserved, LPDWORD lpType,LPBYTE lpData, LPDWORD lpcbData);
]]
function get_port(vid, pid)
if vid == nil then return -1 end
if pid == nil then return -2 end

local com
local DeviceInfoSet = ffi.new('HDEVINFO')
local DeviceIndex = 0
local DeviceInfoData = ffi.new('SP_DEVINFO_DATA', 0)
local DevEnum = ffi.new('PCSTR', "USB")
local ExpectedDeviceId = 'VID_' .. tostring(vid) .. '&PID_' .. tostring(pid)
local szBuffer = ffi.new('unsigned char[1024]', 0)
local ulPropertyType = ffi.new('DEVPROPTYPE[1]')
local dwSize = ffi.new('PDWORD')
DeviceInfoSet = setupapi.SetupDiGetClassDevsA(nil, DevEnum, nil, bit.bor(DIGCF_ALLCLASSES, DIGCF_PRESENT))
DeviceInfoData.cbSize = ffi.sizeof(DeviceInfoData)

while setupapi.SetupDiEnumDeviceInfo(DeviceInfoSet, DeviceIndex, DeviceInfoData) do
DeviceIndex = DeviceIndex + 1
if (setupapi.SetupDiGetDeviceRegistryPropertyA(DeviceInfoSet, DeviceInfoData, SPDRP_HARDWAREID, ulPropertyType, szBuffer, ffi.sizeof(szBuffer), dwSize)) then
if ffi.string(szBuffer):match(ExpectedDeviceId) then
local hDeviceRegistryKey = ffi.new('HKEY')
hDeviceRegistryKey = setupapi.SetupDiOpenDevRegKey(DeviceInfoSet, DeviceInfoData, DICS_FLAG_GLOBAL, 0, DIREG_DEV, KEY_READ);
local pszPortName = ffi.new('char[?]', BUFF_LEN)
local dwSize = ffi.new('DWORD[1]', ffi.sizeof(pszPortName))
local dwType = ffi.new('DWORD[1]')
if advapi32.RegQueryValueExA(hDeviceRegistryKey, "PortName", nil, dwType, pszPortName, dwSize) == ERROR_SUCCESS and dwType[0] == REG_SZ then
com = tonumber(ffi.string(pszPortName):match('%d+'))
end
end
advapi32.RegCloseKey(hDeviceRegistryKey)
end
end
setupapi.SetupDiDestroyDeviceInfoList(DeviceInfoSet)
if com then return com end
return 0
end

-- узнать номер порта, передавать vid, pid
local COM = get_port(2341, 8036) -- указать нужные vid и pid
log(COM)


Порт определятся верно.

Убрал строки до такого состояния отрабатывает только задержка.
скрипт
--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

::me::
wait (3000) -- пауза 3 секунды чтобы переключиться на нужное окно
hw.key ('k') -- нажать клавишу 'k'
goto me

В логе после его запуска это:
1:10:56 0 (test 210110 010231.txt, 0): wait 3000
1:10:59 0 (test 210110 010231.txt, 0): wait 1
1:10:59 0 (test 210110 010231.txt, 0): wait 1
1:10:59 0 (test 210110 010231.txt, 0): wait 1
1:10:59 0 (test 210110 010231.txt, 0): wait 1
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 10.1.2021, 2:00
Сообщение #7


**********

Elder
Сообщений: 3.147
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 20019
Пользователь №: 16.971
Возраст: 29



Цитата
wait 1

Значит порт недоступен для открытия. Попробуйте скетч загрузить ещё раз, перезагрузить пк.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
KotMC
сообщение 10.1.2021, 2:11
Сообщение #8


**

Neophyte
Сообщений: 29
Регистрация: 10.1.2021
Группа: Пользователи
Наличность: 108
Пользователь №: 19.851
Возраст: 36



Совершенно верно, все работает. Только не на этом компе, а на другом.
1пк Win 7 - не работает.
2пк Win 10 - работает.

Пока для меня это явные отличия между двумя компами. Буду разбираться почему не хочет работать на 1.
Спасибо за помощь!!!

Ещё такой момент, в место символа 'k' пишет символ 'л', а если сменить раскладку клавиатуры подключенной к компьютеру клавиатуры набирает правильный символ как это побороть?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 10.1.2021, 2:13
Сообщение #9


**********

Elder
Сообщений: 3.147
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 20019
Пользователь №: 16.971
Возраст: 29



Цитата
Ещё такой момент, в место символа 'k' пишет символ 'л', а если сменить раскладку клавиатуры подключенной к компьютеру клавиатуры набирает правильный символ как это побороть?

text вместо key.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
kyja
сообщение 14.1.2021, 15:59
Сообщение #10


***

Novice
Сообщений: 57
Регистрация: 29.10.2016
Группа: Пользователи
Наличность: 267
Пользователь №: 18.164



Подскажите как Arduino работает для виртуалок то есть например включены 3 виртуалки vmware workstation и со всеми тремя Arduino сможет одновременно работать?

И например такая плата подойдет?
https://aliexpress.ru/item/1005001742819480.html
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 14.1.2021, 17:17
Сообщение #11


**********

Elder
Сообщений: 3.147
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 20019
Пользователь №: 16.971
Возраст: 29



Цитата
Подскажите как Arduino работает для виртуалок

Без понятия. Команды Arduino получает через com порт так что его точно придётся включать.
Цитата
И например такая плата подойдет?
https://aliexpress.ru/item/1005001742819480.html

Подойдёт.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
KotMC
сообщение 18.1.2021, 1:28
Сообщение #12


**

Neophyte
Сообщений: 29
Регистрация: 10.1.2021
Группа: Пользователи
Наличность: 108
Пользователь №: 19.851
Возраст: 36



Отрабатывает один раз, при повторном запуске UO Pilot зависает намертво при использовании этого скрипта:

скрипт

--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_mouse (20) -- установить паузу между нажатиями клавиш мыши
hw.set_random_delay_mouse(10) -- установить рандом между нажатиями клавиш мыши от 0 до 9 мсек
-- т. е. между нажатием и отпусканием кнопки мыши будет пауза от 20 до 29 мсек.
hw.set_offset_mousemove(4) -- шаг перемещения курсора, чем больше тем быстрее перемещается
hw.set_delay_mousemove(2) -- установить паузу между каждый шагом перемещения мыши, чем меньше, тем быстрее перемещается

local startX, startY, endX, endY = 530, 180, 757, 254 -- координаты поиска
local path = [["C:\img\img1.bmp"]] -- путь к картинке, bmp 24 бита
local arr, a = findimage (startX, startY, endX, endY, {path}, 2) -- поиск картинки
hint (a) -- результат поиска, подсказка в правом нижнем углу
if arr then -- если найдена
log ("Изображение найдено в координатах X= " .. arr[1][1] .. " Y= " .. arr[1][2])
hw.mouse.move (651, 225) -- переместить мышь
end


А если использовать этот то все работает многократно

скрипт

--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_mouse (20) -- установить паузу между нажатиями клавиш мыши
--hw.set_random_delay_mouse(10) -- установить рандом между нажатиями клавиш мыши от 0 до 9 мсек
-- т. е. между нажатием и отпусканием кнопки мыши будет пауза от 20 до 29 мсек.
--hw.set_offset_mousemove(4) -- шаг перемещения курсора, чем больше тем быстрее перемещается
--hw.set_delay_mousemove(2) -- установить паузу между каждый шагом перемещения мыши, чем меньше, тем быстрее перемещается

local startX, startY, endX, endY = 530, 180, 757, 254 -- координаты поиска
local path = [["C:\img\img1.bmp"]] -- путь к картинке, bmp 24 бита
local arr, a = findimage (startX, startY, endX, endY, {path}, 2) -- поиск картинки
hint (a) -- результат поиска, подсказка в правом нижнем углу
if arr then -- если найдена
log ("Изображение найдено в координатах X= " .. arr[1][1] .. " Y= " .. arr[1][2])
--hw.mouse.move (651, 225) -- переместить мышь
end


Из за чего такое может происходить?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 18.1.2021, 1:41
Сообщение #13


***********

Модератор UOPilot
Сообщений: 8.730
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 25696
Пользователь №: 11.279



Если во втором скрипте раскомментировать:
Цитата
--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) -- установить паузу между каждый шагом перемещения мыши, чем меньше, тем быстрее перемещается

Раскомментируйте строки по одной и смотрите результат. Проверять все варианты бессмыленно.


--------------------
Скрипты под заказ.
Консультации по UOpilot 12$/час.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 18.1.2021, 1:45
Сообщение #14


**********

Elder
Сообщений: 3.147
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 20019
Пользователь №: 16.971
Возраст: 29



Цитата
Отрабатывает один раз
Из за чего такое может происходить?

По какой-то причине порт не закрывается. В результате при повтором запуске скрипта он просто ждёт когда порт будет доступен для открытия.
Такое может быть только если остановить скрипт во время выполнения команды ардуино. Других причин не знаю.
У меня работает этот скрипт.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 18.1.2021, 4:21
Сообщение #15


***********

Модератор UOPilot
Сообщений: 8.730
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 25696
Пользователь №: 11.279



Цитата
В результате при повтором запуске скрипта он просто ждёт когда порт будет доступен для открытия.

Хм... А можно как-то закрыть порт без ребута железки? Так каждый раз при некорректном завершении скрипта дергать задолбаешься)


--------------------
Скрипты под заказ.
Консультации по UOpilot 12$/час.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
KotMC
сообщение 18.1.2021, 8:34
Сообщение #16


**

Neophyte
Сообщений: 29
Регистрация: 10.1.2021
Группа: Пользователи
Наличность: 108
Пользователь №: 19.851
Возраст: 36



Если во втором скрипте раскомментировать:

--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) -- установить паузу между каждый шагом перемещения мыши, чем меньше, тем быстрее перемещается

приводит к полному зависанию пилота, которое лечится только через диспетчер задач.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 18.1.2021, 13:16
Сообщение #17


**********

Elder
Сообщений: 3.147
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 20019
Пользователь №: 16.971
Возраст: 29



Цитата
А можно как-то закрыть порт без ребута железки?

Пилот надо перезапускать в таких случаях. Порт открывается с помощью CreateFile, закрывать через CloseHandle. Тоже самое что с файлами, пока программа использует файл другая не может использовать его.

KotMC, этот файл в папку с пилотом закиньте Прикрепленный файл  arduino.lua ( 21,69 килобайт ) Кол-во скачиваний: 21

В лог будет выводить сообщение что порт открыт и закрыт.
код
Код
--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) -- переместить мышь

После выполнения скрипта в логе должно быть это:
log
установить паузу между нажатиями клавиш мыши
Открытие порта
Порт открыт
Закрытие порта: true

установить рандом между нажатиями клавиш мыши
Открытие порта
Порт открыт
Закрытие порта: true

установить шаг перемещения курсора
Открытие порта
Порт открыт
Закрытие порта: true

установить паузу между каждый шагом перемещения мыши
Открытие порта
Порт открыт
Закрытие порта: true
4
2
20
10

перемещение курсора
Открытие порта
Порт открыт
Закрытие порта: true
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
KotMC
сообщение 18.1.2021, 21:48
Сообщение #18


**

Neophyte
Сообщений: 29
Регистрация: 10.1.2021
Группа: Пользователи
Наличность: 108
Пользователь №: 19.851
Возраст: 36



Цитата(cirus @ 18.1.2021, 13:16) *

Пилот надо перезапускать в таких случаях. Порт открывается с помощью CreateFile, закрывать через CloseHandle. Тоже самое что с файлами, пока программа использует файл другая не может использовать его.

KotMC, этот файл в папку с пилотом закиньте Прикрепленный файл  arduino.lua ( 21,69 килобайт ) Кол-во скачиваний: 21

В лог будет выводить сообщение что порт открыт и закрыт.
код
Код
--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) -- переместить мышь

После выполнения скрипта в логе должно быть это:
log
установить паузу между нажатиями клавиш мыши
Открытие порта
Порт открыт
Закрытие порта: true

установить рандом между нажатиями клавиш мыши
Открытие порта
Порт открыт
Закрытие порта: true

установить шаг перемещения курсора
Открытие порта
Порт открыт
Закрытие порта: true

установить паузу между каждый шагом перемещения мыши
Открытие порта
Порт открыт
Закрытие порта: true
4
2
20
10

перемещение курсора
Открытие порта
Порт открыт
Закрытие порта: true



Всё сделал в точности, работает раз через раз. То выводит полный лог, то зависает. Если в момент зависания вытащить arduino и заново вставить, лог начнет двигаться и так за несколько раз вытаскивания вставления лог доходит до конца , после этого может несколько раз работать без зависаний.

Изначально стоял драйвер, который идёт при установки ArduinoIDE, пробовал менять его на драйвер из шапки, с ним не работает вовсе. Все делаю на заново установленной win10.

Вешает пилот однозначно arduino.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 18.1.2021, 22:06
Сообщение #19


**********

Elder
Сообщений: 3.147
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 20019
Пользователь №: 16.971
Возраст: 29



Попробуйте другие драйвера, они могут отличаться.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
KotMC
сообщение 19.1.2021, 3:17
Сообщение #20


**

Neophyte
Сообщений: 29
Регистрация: 10.1.2021
Группа: Пользователи
Наличность: 108
Пользователь №: 19.851
Возраст: 36



Перепробовал много разных драйверов результат один, либо сразу зависает либо на втором, третьем пуске.
Поставил win 7 с "родными" драйверами из ArduinoIDE работает более менее стабильно, если зациклить скрипт будет работать пока не отключишь. Драйвер из шапки не смог поставить.

А вот в ручную все же можно повесить порт или пилота - частым запуском, если не делать паузу в секунд 5, после посл вывода:

перемещение курсора
Открытие порта
Порт открыт
Закрытие порта: true



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

3 страниц V  1 2 3 >
Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

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