Что нового

Есть ли в AutoIt аналог команды #Persistent

_ToBe_

Осваивающий
Сообщения
142
Репутация
34
С Самой командой #Persistent я встретился в AutoHotKey.
В чём её заключается её полезность: Она одновременно исполняет несколько процессов скрипта.

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

Может есть какие-то альтернативные решения в AutoIt?
 

sss

Продвинутый
Сообщения
332
Репутация
96
Посмотри функцию AdlibRegister, может, она поможет.
 

dwerf

Использует ArchLinux
Сообщения
478
Репутация
218
Код:
While 1
	;Действия мыши
	MouseMove(MouseGetPos(0)+(-1^Random(0, 1, 1)), MouseGetPos(1)+(-1^Random(0, 1, 1)))

	;Проверка пикселя
	$aPos = PixelSearch(@DesktopWidth*0.25, @DesktopHeight*0.25, @DesktopWidth*0.75, @DesktopHeight*0.75, 0xFFFFFF, 0, 5)
	If Not @error Then
		;Пиксель найден, какие-то действия
		ToolTip('Где-то здесь найден белый цвет.', $aPos[0], $aPos[1])
	EndIf
WEnd
 
Автор
T

_ToBe_

Осваивающий
Сообщения
142
Репутация
34
Спасибо за ответ Дварф, но задачка немного сложнее. Действия мыши самого макроса идут по строго заданному алгоритму и прописанному пути и нужно что бы на протяжении всего пути происходила проверка на наличие пикселя в конкретной точке (Пусть будет 100:200). После чего макрос останавливался в тот момент как только пиксель был найден, выполнял условия нахождения пикселя и потом продолжил свой ход с того места, где остановился...

Попробуем на пимере:
Код:
While 1
	
MouseClick("left", 17, 750)
MouseClick("left", 344, 48)
Sleep(200)
MouseClick("right", 293, 206)
Sleep(200)
MouseClick("left", 315, 217)
Sleep(200)
MouseClick("left", 881, 169)

MouseClick("left", 795, 210)
	Sleep(500)
	Send("{LCTRL}")
	Sleep(200)
	Send("{F1}")
	Send("{F2}")
	Send("{F3}")
	Sleep(1000)
	MouseClick("left", 886, 169)
	
WEnd
Цель - что б на протяжении всего макроса, шла проверка в точке 100:200 на наличие пикселя. Если пиксель нашёлся, к примеру, после команды Send("{F2}"), то в этом месте макрос ставился б на паузу, выполнялось другое действие, описанное под пикселем и затем вновь основной код продолжал идти дальше с команды Send("{F3}") и по кругу.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
_ToBe_

{CodeWarn}
 

dwerf

Использует ArchLinux
Сообщения
478
Репутация
218
_ToBe_ [?]
шла проверка в точке 100:200 на наличие пикселя
Каким образом он может отсутствовать? Пиксель - "точка" в растровом изображении.
При написании скриптов на AutoIt обычно проверяют цвет конкретного пикселя или ищут пиксель с определённым цветом.

Проверять можно "в ручную", или по таймеру. При проверке по таймеру можно пропустить нужный момент, или наоборот проверить сразу несколько раз.

Код:
While 1
	MouseClick("left", 17, 750)
	_CheckPixel()

	MouseClick("left", 344, 48)
	_CheckPixel()
	Sleep(200)

	MouseClick("right", 293, 206)
	_CheckPixel()
	Sleep(200)

	MouseClick("left", 315, 217)
	_CheckPixel()
	Sleep(200)

	MouseClick("left", 881, 169)
	_CheckPixel()

	MouseClick("left", 795, 210)
	_CheckPixel()
	Sleep(500)

	Send("{LCTRL}")
	_CheckPixel()
	Sleep(200)

	Send("{F1}")
	_CheckPixel()

	Send("{F2}")
	_CheckPixel()

	Send("{F3}")
	_CheckPixel()
	Sleep(1000)

	MouseClick("left", 886, 169)
	_CheckPixel()
WEnd

Func _CheckPixel()
	If PixelGetColor(100, 200) = 0xFFFFFF Then
		ToolTip('белый', 100, 200)
	Else
		ToolTip('не белый', 100, 200)
	EndIf
EndFunc


Код:
AdlibRegister('_CheckPixel', 10)

While 1
	MouseClick("left", 17, 750)
	MouseClick("left", 344, 48)
	Sleep(200)
	MouseClick("right", 293, 206)
	Sleep(200)
	MouseClick("left", 315, 217)
	Sleep(200)
	MouseClick("left", 881, 169)
	MouseClick("left", 795, 210)
	Sleep(500)
	Send("{LCTRL}")
	Sleep(200)
	Send("{F1}")
	Send("{F2}")
	Send("{F3}")
	Sleep(1000)
	MouseClick("left", 886, 169)
WEnd

Func _CheckPixel()
	If PixelGetColor(100, 200) = 0xFFFFFF Then
		ToolTip('белый', 100, 200)
	Else
		ToolTip('не белый', 100, 200)
	EndIf
EndFunc
 
Автор
T

_ToBe_

Осваивающий
Сообщения
142
Репутация
34
Спасибо :smile:
Вот этой командой всё решилось: AdlibRegister

А отсутствие пиксела - это дело не хитрое :whistle:
Если цель в таргете - один пиксель, если нет - другой :D

Спасибо ещё раз за оперативный и подробный ответ :smile:
 
Верх