Что нового

Не успевает вывестись текст с помощью функции Send

Andeangl

Новичок
Сообщения
62
Репутация
4
Здравствуйте!

Пытаюсь сделать скрипт, который бы заменил библиотеку ImageSearch, с поиском по 5 точкам (по углам квадрата + по центру).

Сделал функцию, которая бы при клике по точке на экране создаёт массив цветов и выводит его в блокнот.

Но как-то очень странно работает вывод, прерываясь на 3-4 цвете.

Код:
#include <./MouseOnEvent.au3>

Func getObjectPixelsByClickCoords($x, $y, $deviation = 3)
	Local $colors[5]

	; Получаем цвет точки, по которой кликнули + цвета точек на углах квадрата с центром в заданной точке
	$colors[0] = PixelGetColor($x, $y)
	$colors[1] = PixelGetColor($x - $deviation, $y - $deviation)
	$colors[2] = PixelGetColor($x + $deviation, $y - $deviation)
	$colors[4] = PixelGetColor($x + $deviation, $y + $deviation)
	$colors[3] = PixelGetColor($x - $deviation, $y + $deviation)

	Run('notepad.exe')
	WinWaitActive("Безымянный — Блокнот")

	Send("$arr_colors[5] = [" & $colors[0] & ", " & $colors[1] & ", " & $colors[2] & ", " & $colors[3] & ", " & $colors[4] & "]")

	Send("{ENTER}")
EndFunc


Func _MousePrimaryDown_Event($event)


	If $event Then
		Local $coords = MouseGetPos()

		getObjectPixelsByClickCoords($coords[0], $coords[1])
		Sleep(3000)
	Else
		Sleep(3000)
	EndIf
EndFunc

_MouseSetOnEvent($MOUSE_PRIMARYDOWN_EVENT, "_MousePrimaryDown_Event")
MsgBox(0, "Скрипт работает!", "Для получения массива цветов, необходимо в течении 10 секунд щёлкнуть по точке на экране!", 10)


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

InnI

AutoIT Гуру
Сообщения
4,784
Репутация
1,377
Код:
#include <Misc.au3>

Func getObjectPixelsByClickCoords($x, $y, $deviation = 3)
    Local $colors[5]

    ; Получаем цвет точки, по которой кликнули + цвета точек на углах квадрата с центром в заданной точке
    $colors[0] = PixelGetColor($x, $y)
    $colors[1] = PixelGetColor($x - $deviation, $y - $deviation)
    $colors[2] = PixelGetColor($x + $deviation, $y - $deviation)
    $colors[4] = PixelGetColor($x + $deviation, $y + $deviation)
    $colors[3] = PixelGetColor($x - $deviation, $y + $deviation)

    Run('notepad.exe')
    WinWaitActive("Безымянный — Блокнот")
    Send("$colors[5] = [" & $colors[0] & ", " & $colors[1] & ", " & $colors[2] & ", " & $colors[3] & ", " & $colors[4] & "]")
    Send("{ENTER}")

    ; вариант с записью в файл coords.txt
    ; $line = "$colors[5] = [" & $colors[0] & ", " & $colors[1] & ", " & $colors[2] & ", " & $colors[3] & ", " & $colors[4] & "]"
    ; FileWriteLine("coords.txt", $line)
    ; Run('notepad.exe coords.txt')
EndFunc


Func _MousePrimaryDown_Event()
    While Not _IsPressed("01")
        Sleep(11)
    WEnd
    Local $coords = MouseGetPos()
    getObjectPixelsByClickCoords($coords[0], $coords[1])
EndFunc

MsgBox(0, "Скрипт работает!", "Закройте это окно и кликните в нужной точке")
_MousePrimaryDown_Event()
 
Автор
A

Andeangl

Новичок
Сообщения
62
Репутация
4
InnI сказал(а):
Код:
#include <Misc.au3>

Func getObjectPixelsByClickCoords($x, $y, $deviation = 3)
    Local $colors[5]

    ; Получаем цвет точки, по которой кликнули + цвета точек на углах квадрата с центром в заданной точке
    $colors[0] = PixelGetColor($x, $y)
    $colors[1] = PixelGetColor($x - $deviation, $y - $deviation)
    $colors[2] = PixelGetColor($x + $deviation, $y - $deviation)
    $colors[4] = PixelGetColor($x + $deviation, $y + $deviation)
    $colors[3] = PixelGetColor($x - $deviation, $y + $deviation)

    Run('notepad.exe')
    WinWaitActive("Безымянный — Блокнот")
    Send("$colors[5] = [" & $colors[0] & ", " & $colors[1] & ", " & $colors[2] & ", " & $colors[3] & ", " & $colors[4] & "]")
    Send("{ENTER}")

    ; вариант с записью в файл coords.txt
    ; $line = "$colors[5] = [" & $colors[0] & ", " & $colors[1] & ", " & $colors[2] & ", " & $colors[3] & ", " & $colors[4] & "]"
    ; FileWriteLine("coords.txt", $line)
    ; Run('notepad.exe coords.txt')
EndFunc


Func _MousePrimaryDown_Event()
    While Not _IsPressed("01")
        Sleep(11)
    WEnd
    Local $coords = MouseGetPos()
    getObjectPixelsByClickCoords($coords[0], $coords[1])
EndFunc

MsgBox(0, "Скрипт работает!", "Закройте это окно и кликните в нужной точке")
_MousePrimaryDown_Event()

Супер, спасибо огромное! =))))
 
Верх