Что нового

Определение пикселя идет с задержкой

jslby

Новичок
Сообщения
11
Репутация
0
Код:
Func checkPX()
	$pixel = ""
	Do
		$pixel = Hex(PixelGetColor($cxy[4][0], $cxy[4][1]), 6)
	Until $pixel
	MsgBox(0, "", $pixel)
	If $pixel = "FFFFFF" Or $pixel = "FEFEFE" Or $pixel = "969696" Then
		Return True
	Else
		Return False
	EndIf
EndFunc

Данная функция вызывается в цикле. И при проходе, она определяет пиксель только в следующей итерации. Т.е. я вижу что окно с которого я беру пиксель поменялось, сообщение выскакивает что пиксель #666666 цвета, хотя на монеторе чисто белый. Потом окно с которого я беру цвет меняет пиксель на #666666, а софт выдает что белый. Т.е. идет запаздание на одну итерацию. В чем может быть проблема? Кто поможет, отблагодарю. Могу деньги на телефон закинуть.
 

edyapd

Осваивающий
Сообщения
380
Репутация
30
Re: Определение пикселя идет с задержкой. ПОМОГИТЕ!

Мне кажется ошибка в каком-то другом месте.
Сделал пример с вашей функцией. Всё нормально работает
Код:
#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)
Opt("PixelCoordMode", 2)            ;1=абсолютные, 0=относительные, 2=клиентские

Local $msg
Local $hWnd
	
$hWnd = GUICreate("My GUI")
GUISetState()

While 1
	$msg = GUIGetMsg()
	GUISetBkColor(Random(0, 0xFFFFFF, 1))
	checkPX(50, 50, $hWnd)
	If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd

Func checkPX($cx, $cy, $hWnd)
    Local $pixel = ""
    Do
        $pixel = Hex(PixelGetColor($cx, $cy), 6)
    Until $pixel
    MsgBox(0, "", $pixel)
    If $pixel = "FFFFFF" Or $pixel = "FEFEFE" Or $pixel = "969696" Then
        Return True
    Else
        Return False
    EndIf
EndFunc
 
Автор
jslby

jslby

Новичок
Сообщения
11
Репутация
0
Re: Определение пикселя идет с задержкой. ПОМОГИТЕ!

edyapd сказал(а):
Мне кажется ошибка в каком-то другом месте.
Сделал пример с вашей функцией. Всё нормально работает
Код:
#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)
Opt("PixelCoordMode", 2)            ;1=абсолютные, 0=относительные, 2=клиентские

Local $msg
Local $hWnd
	
$hWnd = GUICreate("My GUI")
GUISetState()

While 1
	$msg = GUIGetMsg()
	GUISetBkColor(Random(0, 0xFFFFFF, 1))
	checkPX(50, 50, $hWnd)
	If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd

Func checkPX($cx, $cy, $hWnd)
    Local $pixel = ""
    Do
        $pixel = Hex(PixelGetColor($cx, $cy), 6)
    Until $pixel
    MsgBox(0, "", $pixel)
    If $pixel = "FFFFFF" Or $pixel = "FEFEFE" Or $pixel = "969696" Then
        Return True
    Else
        Return False
    EndIf
EndFunc

Проблема в том, что интерфейс программы, которую я автоматизирую, не успевает обновляться. Пробовал брать позицию каретки, но тоже запоздание в одну итерацию. Вам было бы интересно разобраться за вознаграждение? Напишите в скайп: jslby.ru
 

edyapd

Осваивающий
Сообщения
380
Репутация
30
Re: Определение пикселя идет с задержкой. ПОМОГИТЕ!

jslby сказал(а):
Проблема в том, что интерфейс программы, которую я автоматизирую, не успевает обновляться.
Вот вы сами и определили проблему. Может стоит где-то вставить задержку, для того чтобы перед считыванием цвета успел обновится интерфейс?
jslby сказал(а):
Вам было бы интересно разобраться за вознаграждение?
Я не настолько силён в AutoIT чтобы браться что-то делать за вознаграждение
 
Автор
jslby

jslby

Новичок
Сообщения
11
Репутация
0
Re: Определение пикселя идет с задержкой. ПОМОГИТЕ!

edyapd сказал(а):
jslby сказал(а):
Проблема в том, что интерфейс программы, которую я автоматизирую, не успевает обновляться.
Вот вы сами и определили проблему. Может стоит где-то вставить задержку, для того чтобы перед считыванием цвета успел обновится интерфейс?
jslby сказал(а):
Вам было бы интересно разобраться за вознаграждение?
Я не настолько силён в AutoIT чтобы браться что-то делать за вознаграждение
Да, но я четко вижу как интерфейс обновился. Поле стало белым. Но требуется задержка в секунду что бы всё было нормально. Как это обойти?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Re: Определение пикселя идет с задержкой. ПОМОГИТЕ!

jslby

1. Не нужно в названии темы писать "ПОМОГИТЕ!" и т.д. Это больше привлекает внимания модераторов, а не тех, кто может и хочет помочь. Поправьте пожалуйста.
2.
Предупреждение За нарушение общих правил (пункт В.2):
Старайтесь избегать “Over quoting” (преувеличенное цитирование) - цитируйте только необходимую часть сообщения, которая наилучшим образом подчеркнёт суть цитируемого.


С уважением, ваш Модератор.
 
Верх