Проверка наличия Splash window
#1
Отправлено 19 февраля 2007 - 16:16
#2
Отправлено 19 февраля 2007 - 17:05
Еще можно стили посмотреть : самО окно есть, но у него нет заголовка, кнопок, меню и статус бара + часто оно сделано постоянно самым верхним и еще у него могут быть характерные размеры (типа 100х60) ... в общем - тут надо смотреть по конкретному приложению ...
PS: и кстати логотип (как и весь splash screen) можно по эталонному скрину проверять (см метод CaptureBitmap и функцию SYS_CompareBitmap)
PPS: ща на меня за битмапы наверно будут бить , но это ведь всего лишь совет, не так ли ?
#3
Отправлено 20 февраля 2007 - 07:29
PS: и кстати логотип (как и весь splash screen) можно по эталонному скрину проверять (см метод CaptureBitmap и функцию SYS_CompareBitmap)
PPS: ща на меня за битмапы наверно будут бить , но это ведь всего лишь совет, не так ли ?
За битмапы бить никто не будет. Не боись. Просто другое дело, что момент, когда этот самый битмап появится, нужно еще поймать. То есть имеются ситуации, когда какое-то событие происходит в течение некоторого времени, после чего его отловить нельзя. Соответственно, в зависимости от нагрузки на систему, длительность таких событий варьируется.
Hunter_ua
В общем, решите, действительно ли это целесообразно автоматизировать или лучше обойти, так как эта проверка - это потенциальный рассадник ошибок. А логотип проверять придется скорее всего путем сравнения битмапов ( как и было предложено ), что тоже само по себе не очень стабильно в работе
#4
Отправлено 20 февраля 2007 - 08:32
#5
Отправлено 20 февраля 2007 - 08:34
#6
Отправлено 20 февраля 2007 - 09:13
создается оно очень просто : запускаете приложение и когда видите сплеш, жмите Alt+PrintScreen. Потом запускаете pbrush (ака пейнтбраш), вставляете картинку из буфера и сохраняете. Это будет эталон.Так как же все таки создать этот битмап?И с помощью какой функции его можно отловить в нужный момент? Ведь само приложение еще не загрузилось...
Программно - ИМХО это можно сделать так :
1) запускаем приложение
2) ждем появления окна (.Exists() == TRUE)
3) смотрим размер, если он подходящий (.Rect == rectEtalon)
4) делаем скриншотец .CaptureBitmap()
5) сравниваем картинки SYS_CompareBitmap ()
как вариант можно делать сначала скриншот, а потом смотреть размер окна или даже не смотреть размер (самО проверит при сравнении рисунков), но я не помню - генерит ли SYS_CompareBitmap () в таких случаях исключения, или нормально работает...
Еще внимательно надо, если там есть какие-то скроллеры или анимированные элементы (типа "флажок на ветру" и пр). Тогда нужно будет отсекать эти вещи по размеру области или мутить с масками. Если такое есть - то можно подробнее рассказать, если нету - то не забивайте себе голову ;)
#7
Отправлено 20 февраля 2007 - 09:25
To KaNoN: а обойти этот процесс без автоматизации нельзя, т.к. оно есть в задании.
Я имел ввиду саму проверку обойти. Уже ожидать появления самого приложения. Такое иногда происходит, особенно в тех случаях, когда Силк просто не реагирует на данное окно.
Это лучше использовать в том случае, если нельзя поймать само окно. Если его можно поймать, то эталонный рисунок можно получить путем вызова CaptioreBitmap у данного окна. И соответственно сравнивать в пределах самого окна. Чем меньше битмап, тем ниже вероятность расхождения в цветах пикселовсоздается оно очень просто : запускаете приложение и когда видите сплеш, жмите Alt+PrintScreen. Потом запускаете pbrush (ака пейнтбраш), вставляете картинку из буфера и сохраняете. Это будет эталон.
Программно - ИМХО это можно сделать так :
1) запускаем приложение
2) ждем появления окна (.Exists() == TRUE)
3) смотрим размер, если он подходящий (.Rect == rectEtalon)
4) делаем скриншотец .CaptureBitmap()
5) сравниваем картинки SYS_CompareBitmap ()
как вариант можно делать сначала скриншот, а потом смотреть размер окна или даже не смотреть размер (самО проверит при сравнении рисунков), но я не помню - генерит ли SYS_CompareBitmap () в таких случаях исключения, или нормально работает...
А вот если окно поймать не удается, то тогда уже скрин всего экрана нужно делать. Естественно, при этом желательно убрать все лишние окна и привести Desktop к некоторому стандартному виду ( имеется ввиду убрать там всякие картинки, выставить некоторую стандартную цветовую схему и т.п.). Это позволит избежать лишних ошибок скриптов
#8
Отправлено 20 февраля 2007 - 10:27
то есть ??? если уж окно отображается, то его можно поймать ;) (как минимум по имени исполняемого файла)если нельзя поймать само окно.
#9
Отправлено 20 февраля 2007 - 10:31
А если все-таки окно можно поймать, то пожалуй лучше тогда исключительно с ним работать (имеется ввиду проверки битмапов). Меньше возни и лишних неприятностей
#10
Отправлено 13 марта 2007 - 16:05
#11
Отправлено 13 марта 2007 - 16:12
после старта приложения, ловим окошко через
MainWin( "$<вот тут ставим полное имя исполняемого файла>").Exists(30)
и если оно найдено, то делаем что-то типа
MainWin( "$<вот тут ставим полное имя исполняемого файла>").CaptureBitmap( "<имя файла БМП , куда сохранять>" )
Это мы получим эталонный битмап.
А проверить его потом можно будет путем вызова VerifyBitmap метода или SYS_CompareBitmap - функции.
То есть хотя бы проверить, можно ли вот так рисунок выхватить
#12
Отправлено 14 марта 2007 - 13:03
#13
Отправлено 14 марта 2007 - 13:51
#14
Отправлено 14 марта 2007 - 13:55
[-] dll "shell32.dll" [ ] HINSTANCE ShellExecute (in HWND hwnd,in STRING lpOperation,in STRING lpFile,in STRING lpParameters,in STRING lpDirectory, in INT nShowCmd) alias "ShellExecuteA"
ну а вызов будет выглядеть так примерноShellExecute(0,"","msimn","","",SW_SHOWNORMAL)
это пример запуска Outlook Express'a
#15
Отправлено 14 марта 2007 - 15:23
#16
Отправлено 14 марта 2007 - 15:27
#17
Отправлено 14 марта 2007 - 16:30
#18
Отправлено 15 марта 2007 - 07:46
[+] dll "shell32.dll" [ ] HINSTANCE ShellExecute (in HWND hwnd,in STRING lpOperation,in STRING lpFile,in STRING lpParameters,in STRING lpDirectory, in INT nShowCmd) alias "ShellExecuteA"
Квадратные скобки начинают строку. Если + в квадратных скобках, то блок раскрывается. Все компилируется. Если нет, то выведите полный текст ошибки.
Тут табы как-то коряво отображаются. То есть сама функция внутри блока
[+] dll "shell32.dll"
#19
Отправлено 15 марта 2007 - 08:22
#20
Отправлено 15 марта 2007 - 08:35
Или, если поблизости есть Visual Studio, то найдите файл, где эта константа объявлена и объявите с таким же значением в Силке
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных