Что нового

Блокирование окна при PixelSearch

Garik88

Новичок
Сообщения
8
Репутация
3
Поискал нечто подобное на форуме и не нашел. Может плохо искал.
Столкнулся с проблемой при работе с окном евы. Допустим делаем анализ Overview и активно используем PixelSearch. Время от времени окно блокируется на несколько секунд и Ева не воспринимает ни каких команд. Я так понимаю, что PixelSearch получает дескриптор экрана и при поиске пытается заблокировать экран. Т.к. Блок экрана происходит часто и иногда еву клинит, что срубается драйвер. Видеокарта nVidia, Ктонибудь с таким сталкивался? И как боролся?
 

mornere

Знающий
Сообщения
22
Репутация
8
Запостил бы хоть кусок кода, сколько там серчей и заодно конфиг машины.
 

usrman

Новичок
Сообщения
13
Репутация
0
Зависит от кода, карта nvidia подобных проблем не наблюдаю.
Покажи код анализа овервью и конфиг системы, может там чего лишнего в коде или комп не оправдывает оказанного доверия.

P.S. Сори, в предыдущем посте тоже самое. Возможно истина где-то рядом :smile:
 
Автор
G

Garik88

Новичок
Сообщения
8
Репутация
3
mornere сказал(а):
Запостил бы хоть кусок кода, сколько там серчей и заодно конфиг машины.
usrman сказал(а):
Зависит от кода, карта nvidia подобных проблем не наблюдаю.
Покажи код анализа овервью и конфиг системы, может там чего лишнего в коде или комп не оправдывает оказанного доверия.
Машинка не очень мощная Athlon 64 3000+ одноядерный, 3 гига оперативки. nVidia GeForce GTX460, OC Vista 32Bit

Код:
Func OvrAnalyze ()
	Local $ex = False
	Local $i = 0
	While $ex = False
		Local $X = $OverviewViews[0]
		Local $Y = $OverviewViews[1]+($i)*$RowsInterval+$RowsInterval
		Local $Coord = PixelSearch($X, $Y, $X, $Y, $OverviewViews[4],$OverviewViews[5])
		If not @error Then
			$OverviewArray [$i][0] = $Coord[0]
			$OverviewArray [$i][1] = $Coord[1]-$RowsInterval 
			$OverviewArray [$i][2] = OvrGetTypeRows($Coord[0], $Coord[1]-$RowsInterval)
		Else
			$ex = True
		EndIf
		$i=$i+1
	WEnd
	Return $i-1
EndFunc

Func OvrGetTypeRows($x,$y)
	local $Find=False
	Local $i=0
	For $i = 0 To UBound($OverTypeSignature)-1 step 1 
		Local $Coord = PixelSearch($X+$OverTypeSignature[$i][1], $Y+$OverTypeSignature[$i][2], $X+$OverTypeSignature[$i][1], $Y+$OverTypeSignature[$i][2], $OverTypeSignature[$i][3],$OverTypeSignature[$i][4])
		If Not @error then 
			Return $OverTypeSignature[$i][0]
		EndIf
	Next
	
	PixelSearch($X+7,$Y+5,$X+12,$Y+13,0x000000,0,40)
	If Not @error Then
		Return "Астероид"
	EndIf
	
	PixelSearch($X+7,$Y+5,$X+12,$Y+13,0x000000,0x404040,40)
	If Not @error Then
		Return "Астероид"
	EndIf
	Return "Неопознан"
EndFunc


Суть - ищем строки в овервью, а дальше поиском определяем по иконкам из массива тип записи и записываем это все в массив. Sleep не использовал по причине того, что овервью может изменится. Давно не програмил уже навык потерял.
Кстати вот этот код работает на ура. Очень быстро и четко. Здесь берем все белты в системе из системного меню.
Код:
Func GetAllBelts ()
	Local $Count = 0
	
	PixelSearch($SystemMenu[0],$SystemMenu[1],$SystemMenu[2],$SystemMenu[3],$SystemMenu[4],$SystemMenu[5])
	If Not @error Then
		Local $X = Random($SystemMenu[0],$SystemMenu[2])
		Local $Y = Random($SystemMenu[1],$SystemMenu[3])
		;Local $X = $SystemMenu[0]
		;Local $Y = $SystemMenu[1]
		MouseMove($X,$Y, Random(1,6))
		MouseClick("Left")
		Sleep(Random(1000,2000))
		Local $Coord = PixelSearch($X+200,$Y+25,$X+350,$Y+25, 0x696969, 10)
		If Not @error Then
			MouseMove($X+Random(60, 140), $Y+Random(25,32), Random(3,7))
			$Coord = PixelSearch($Coord[0],$Coord[1],$Coord[0]+300,$Coord[1], 0x6E6E6E, 10)
			If Not @error Then
				$Coord [1] = $Coord [1] -18 
				while Not @error
					$Coord = PixelSearch($Coord[0],$Coord[1]+18, $Coord[0],$Coord[1]+18, 0x6E6E6E, 10)
					If Not @error Then
						$Count = $Count+1
						$BeltList [$Count][0] = $Coord [0] - $X
						$BeltList [$Count][1] = $Coord [1] - $Y
					EndIf
				WEnd
			EndIf
		EndIf
		MouseMove(40,32, Random(2,6))
		MouseClick("Left")
	EndIf
	return $Count
EndFunc
 
Автор
G

Garik88

Новичок
Сообщения
8
Репутация
3
Кажется я вкупился. Я PixelSearch неправильно использую. Сейчас попробую переделать.
Неправильно прочитал в хелпе про параметр Step. Крышу драйверу сносит капитально.
Симптомы

Имя журнала: System
Подача: Display
Дата: 03.03.2011 16:14:36
Код события: 4101
Категория задачи:Отсутствует
Уровень: Предупреждение
Ключевые слова:Классический
Пользователь: Н/Д
Компьютер:
Описание:
Видеодрайвер nvlddmkm перестал отвечать и был успешно восстановлен.

Тему можно закрывать :smile:
 
Верх