Что нового

Скрипт не работает на разных машинах(проблема с определением цветов)

~HZ~

Новичок
Сообщения
9
Репутация
0
Здравствуйте!
Столкнулся с такой же проблемой, как здесь http://autoit-script.ru/index.php?topic=2182.0. Дома на компе(XP sp3) скрипт работает, а на рабочем ноуте(Win7) нет и наоборот после корректировки цветов(по одним и тем же координатам определяются разные цвета)...
Вот собственно скрипт:
Код:
$a=WinActivate("Лобби"); активируем главное окно
if Not $a Then Exit
WinMove("Лобби","",283,82)
MouseClick("left",773, 238,1)
Sleep(5000)

MouseClick("left",390,338,1) ; клик на верхний стол

PixelSearch(1059,532,1061,534,1742311) ;проверяем синяя ли кнопка

	If @error=0 Then ;если синяя
		PixelSearch(1048,527,1051,535,0) ;проверяем наличие надписи 'очередь'
		If @error=0 Then ;если да
			MouseClick("left",1050,529,1) ;жмем кнопку очередь
			WinWaitActive("Сообщение игрока")
			WinMove("Сообщение игрока","",516,271)
			MouseClick("left",684, 419,1) ;OK
		EndIf
	ElseIf @error=1 Then ;если не синяя
		PixelSearch(1059,532,1061,534,7960953) ;проверяем серая ли кнопка
		If @error=0 Then ;если да
			PixelSearch(921,527,922,537,0)
			If @error=1 Then
				MouseClick("left",918,527,1) ;кнопка показать стол/сесть 921_922 527_537
				WinWaitActive('[REGEXPTITLE:^\w*\sNLH\s(.*?)$]')
			EndIf
		EndIf
	Else
		;следующий стол
	EndIf


Я только начинаю осваивать AutoIt, поэтому еще плохо ориентируюсь в тематике...
Вопросов несколько.
Какие координаты лучше использовать: относительно монитора или относительно активного окна?
Какие функции лучше использовать для определения цветов и работы с ними, учитывая то что нужна возможность распознавания не которых элементов текста на кнопках и полях, свойства которых в AutoIT Info не отображаются?
Ну и пожалуй самый основной :smile:: Как сделать, чтобы все это работало на разных машинах с разным железом и размером дисплея?

Заранее благодарю за помощь!
 

rusreg79

Продвинутый
Сообщения
159
Репутация
57
Отключи Aero на семерке и должно заработать.
 
Автор
H

~HZ~

Новичок
Сообщения
9
Репутация
0
2qsort
Хотя, PixelSearch(), наверно, не лучший способ, чтобы определить цвет кнопки. Здесь лучше бы смотрелась PixelGetColor()
Изначально с PixelGetColor() и написал, но когда дома оно работать не захотело, начал искать другие варианты, а т.к. на кнопке цвет переходит от светлого к темному и на мониторах разное разрешение, предположил, что возможно что-нить смещается и цвет неправильно определяется, поэтому решил искать нужный цвет в области....
если везде характеристики экрана одинаковые, то на всех машинах цвета определялись тоже одинаково
А какие конкретно характеристики влияют на цвета? (разрешение, битность, что еще....)
Походу надежней будет делать под виртуальные машины с одинаковыми характеристиками....
2rusreg79
Отключи Aero на семерке и должно заработать
Читал эту тему на форуме. Хочется сделать универсальную софтину, чтоб не менять настройки :smile:
 
Автор
H

~HZ~

Новичок
Сообщения
9
Репутация
0
qsort сказал(а):
Никак на 150 машин этот скрипт помещать придется? ;)
Ну не на 150 конечно, но машин на 5 точно 8) и ноута нет в этом списке :smile: Дома времени не хватает на ваяние софта, приходится рабочее время и технику использовать в личных целях :smile:
Поутому и стремлюсь к универсальности :smile:

Хотя причина ИМХО не в координатах, а именно в разных кодах нужного цвета, т.к. положение окна я фиксирую и размер его тож вроде статичен или его можно сделать таковым...
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
~HZ~
если разрешения мониторов разные, то и координаты будут меняться от экрана к экрану. поэтому надо смотреть на то, как строится окно. если оно чужое и его размер пропорционально зависит от разрешения монитора то будет туго, так в голову ничего не приходит. но если окно свое, либо его размер жестко задается самой программой, то надо привязываться к координатам относительно окна. там тоже все будет зафиксировано вне зависимости от монитора
 
Автор
H

~HZ~

Новичок
Сообщения
9
Репутация
0
Kaster сказал(а):
если разрешения мониторов разные, то и координаты будут меняться от экрана к экрану. поэтому надо смотреть на то, как строится окно. если оно чужое и его размер пропорционально зависит от разрешения монитора то будет туго, так в голову ничего не приходит.
Думал об этом, но чет не сравнил размер окна тут и там... А можно с помощью WinMove () задавать ему нужный размер? пропорционально исходному естественно...
Если размер окна везде, например, 300х200 и я его помещаю в точку 40х40, то по логике вроде координаты меняться не должны...
Окно чужое, причем в перспективе алгоритм должен будет работать с окнами и других подобных приложений с подстройкой под конкретное приложение
его размер жестко задается самой программой, то надо привязываться к координатам относительно окна.
с этим согласен, так и буду делать наверное, только вопрос: можно какой-то функцией получать такие координаты, или надо ручками считать в зависимости от координат положения окна?,...
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
~HZ~ [?]
с помощью WinMove () задавать ему нужный размер? пропорционально исходному естественно...
зависит от программы. некоторые могут запретить изменение размеров. но если это можно сделать то менять надо на что-то конкретное, а не пропорциональное.
потом цвет пикселя будешь вытаскивать по одним и тем же координатам выставив предварительно
Код:
Opt("PixelCoordMode", 0)
 
Автор
H

~HZ~

Новичок
Сообщения
9
Репутация
0
Kaster сказал(а):
Код:
Opt("PixelCoordMode", 0)
Сори, немного не так выразился, имел в виду как получить координаты нужного пиксела в режиме ("PixelCoordMode", 0), туплю немного)) уже нашел в AutoIt Info "Coord Mode"->"Window".
Огромное спасибо всем за ответы, видимо нет простого лекарства от этой болезни, значит буду тестить на разных настройках и делать If ... Then...
Остался последний вопрос.
Какие же все-таки параметры системы влияют на определение цвета?
 
Автор
H

~HZ~

Новичок
Сообщения
9
Репутация
0
qsort сказал(а):
Во всяком случае, однозначно влияет количество цветов! ;D Качество цветопередачи в окошке "Экран:свойства" - "Параметры".
Других проблем не встречал.

Эт понятно ;D А какими средствами AutoIt'а их вытащить в скрипте для сравнения?...
И какие конкретно нужны? тип ОС, разрешение, количество цветов, яркость?... Что еще? или что-то лишнее написал?))

qsort сказал(а):
Для определения характеристик экрана существуют макросы @DesktopHeight, @DesktopWidth, @DesktopDepth, @DesktopRefresh, которые помогут определиться с работой скрипта в разных условиях.
Этого будет достаточно?
 
Верх