Перейти к содержимому

Фотография

Проверка наличия Splash window


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 22

#1 Hunter_ua

Hunter_ua

    Новый участник

  • Members
  • Pip
  • 47 сообщений
  • ФИО:Андрей

Отправлено 19 февраля 2007 - 16:16

Подскажите, каким образом можно проверить наличие или отсутвие Splash window (окно с логотипом проги, версией, которое появляется до загрузки самой программы)? :blum:
  • 0

#2 vass

vass

    Опытный участник

  • Members
  • PipPipPipPip
  • 298 сообщений
  • ФИО:Василий

Отправлено 19 февраля 2007 - 17:05

Скорее всего это будет MainWin либо без ничего либо с картинкой внутри...
Еще можно стили посмотреть : самО окно есть, но у него нет заголовка, кнопок, меню и статус бара + часто оно сделано постоянно самым верхним и еще у него могут быть характерные размеры (типа 100х60) ... в общем - тут надо смотреть по конкретному приложению ...

PS: и кстати логотип (как и весь splash screen) можно по эталонному скрину проверять (см метод CaptureBitmap и функцию SYS_CompareBitmap)
PPS: ща на меня за битмапы наверно будут бить :dirol: , но это ведь всего лишь совет, не так ли ? :blum:
  • 0

#3 KaNoN

KaNoN

    АЦЦКИЙ СОТОНА

  • Members
  • PipPipPipPipPipPip
  • 1 260 сообщений
  • ФИО:Колесник Николай
  • Город:Днепропетровск > Киев > Лондон

Отправлено 20 февраля 2007 - 07:29

PS: и кстати логотип (как и весь splash screen) можно по эталонному скрину проверять (см метод CaptureBitmap и функцию SYS_CompareBitmap)
PPS: ща на меня за битмапы наверно будут бить  :dirol: , но это ведь всего лишь совет, не так ли ? :blum:

Просмотр сообщения


За битмапы бить никто не будет. Не боись. Просто другое дело, что момент, когда этот самый битмап появится, нужно еще поймать. То есть имеются ситуации, когда какое-то событие происходит в течение некоторого времени, после чего его отловить нельзя. Соответственно, в зависимости от нагрузки на систему, длительность таких событий варьируется.

Hunter_ua
В общем, решите, действительно ли это целесообразно автоматизировать или лучше обойти, так как эта проверка - это потенциальный рассадник ошибок. А логотип проверять придется скорее всего путем сравнения битмапов ( как и было предложено ), что тоже само по себе не очень стабильно в работе
  • 0

#4 Hunter_ua

Hunter_ua

    Новый участник

  • Members
  • Pip
  • 47 сообщений
  • ФИО:Андрей

Отправлено 20 февраля 2007 - 08:32

Так как же все таки создать этот битмап?И с помощью какой функции его можно отловить в нужный момент? Ведь само приложение еще не загрузилось... :blum:
  • 0

#5 Hunter_ua

Hunter_ua

    Новый участник

  • Members
  • Pip
  • 47 сообщений
  • ФИО:Андрей

Отправлено 20 февраля 2007 - 08:34

To KaNoN: а обойти этот процесс без автоматизации нельзя, т.к. оно есть в задании.
  • 0

#6 vass

vass

    Опытный участник

  • Members
  • PipPipPipPip
  • 298 сообщений
  • ФИО:Василий

Отправлено 20 февраля 2007 - 09:13

Так как же все таки создать этот битмап?И с помощью какой функции его можно отловить в нужный момент? Ведь само приложение еще не загрузилось...  :blum:

Просмотр сообщения

создается оно очень просто : запускаете приложение и когда видите сплеш, жмите Alt+PrintScreen. Потом запускаете pbrush (ака пейнтбраш), вставляете картинку из буфера и сохраняете. Это будет эталон.
Программно - ИМХО это можно сделать так :
1) запускаем приложение
2) ждем появления окна (.Exists() == TRUE)
3) смотрим размер, если он подходящий (.Rect == rectEtalon)
4) делаем скриншотец .CaptureBitmap()
5) сравниваем картинки SYS_CompareBitmap ()
как вариант можно делать сначала скриншот, а потом смотреть размер окна или даже не смотреть размер (самО проверит при сравнении рисунков), но я не помню - генерит ли SYS_CompareBitmap () в таких случаях исключения, или нормально работает...
Еще внимательно надо, если там есть какие-то скроллеры или анимированные элементы (типа "флажок на ветру" и пр). Тогда нужно будет отсекать эти вещи по размеру области или мутить с масками. Если такое есть - то можно подробнее рассказать, если нету - то не забивайте себе голову ;)
  • 0

#7 KaNoN

KaNoN

    АЦЦКИЙ СОТОНА

  • Members
  • PipPipPipPipPipPip
  • 1 260 сообщений
  • ФИО:Колесник Николай
  • Город:Днепропетровск > Киев > Лондон

Отправлено 20 февраля 2007 - 09:25

To KaNoN: а обойти этот процесс без автоматизации нельзя, т.к. оно есть в задании.

Просмотр сообщения


Я имел ввиду саму проверку обойти. Уже ожидать появления самого приложения. Такое иногда происходит, особенно в тех случаях, когда Силк просто не реагирует на данное окно.

создается оно очень просто : запускаете приложение и когда видите сплеш, жмите Alt+PrintScreen. Потом запускаете pbrush (ака пейнтбраш), вставляете картинку из буфера и сохраняете. Это будет эталон.
Программно - ИМХО это можно сделать так :
1) запускаем приложение
2) ждем появления окна (.Exists() == TRUE)
3) смотрим размер, если он подходящий (.Rect == rectEtalon)
4) делаем скриншотец .CaptureBitmap()
5) сравниваем картинки SYS_CompareBitmap ()
как вариант можно делать сначала скриншот, а потом смотреть размер окна или даже не смотреть размер (самО проверит при сравнении рисунков), но я не помню - генерит ли SYS_CompareBitmap () в таких случаях исключения, или нормально работает...

Это лучше использовать в том случае, если нельзя поймать само окно. Если его можно поймать, то эталонный рисунок можно получить путем вызова CaptioreBitmap у данного окна. И соответственно сравнивать в пределах самого окна. Чем меньше битмап, тем ниже вероятность расхождения в цветах пикселов

А вот если окно поймать не удается, то тогда уже скрин всего экрана нужно делать. Естественно, при этом желательно убрать все лишние окна и привести Desktop к некоторому стандартному виду ( имеется ввиду убрать там всякие картинки, выставить некоторую стандартную цветовую схему и т.п.). Это позволит избежать лишних ошибок скриптов
  • 0

#8 vass

vass

    Опытный участник

  • Members
  • PipPipPipPip
  • 298 сообщений
  • ФИО:Василий

Отправлено 20 февраля 2007 - 10:27

если нельзя поймать само окно.

то есть ??? если уж окно отображается, то его можно поймать ;) (как минимум по имени исполняемого файла)
  • 0

#9 KaNoN

KaNoN

    АЦЦКИЙ СОТОНА

  • Members
  • PipPipPipPipPipPip
  • 1 260 сообщений
  • ФИО:Колесник Николай
  • Город:Днепропетровск > Киев > Лондон

Отправлено 20 февраля 2007 - 10:31

Не всегда можно поймать окно, если оно отображается. Это особенно характерно для тех случаев, когда окно появляется и исчезает в процессе обработки события, которое аффектит Силк. Я столкнулся с подобным один раз пока что, но там был немного другой случай.

А если все-таки окно можно поймать, то пожалуй лучше тогда исключительно с ним работать (имеется ввиду проверки битмапов). Меньше возни и лишних неприятностей
  • 0

#10 Hunter_ua

Hunter_ua

    Новый участник

  • Members
  • Pip
  • 47 сообщений
  • ФИО:Андрей

Отправлено 13 марта 2007 - 16:05

Вот у меня тока руки дошли до написания этого тесткейса, я сделал Alt+PrintScreen, и у меня есть образец окошка, но вот как его идентифицировать и не понятно, Window Declarations ничего не показывает. Посоветуйте что-нибудь плиззз.
  • 0

#11 KaNoN

KaNoN

    АЦЦКИЙ СОТОНА

  • Members
  • PipPipPipPipPipPip
  • 1 260 сообщений
  • ФИО:Колесник Николай
  • Город:Днепропетровск > Киев > Лондон

Отправлено 13 марта 2007 - 16:12

А попробуйте его ловить во время выполнения скрипта:

после старта приложения, ловим окошко через

MainWin( "$<вот тут ставим полное имя исполняемого файла>").Exists(30)

и если оно найдено, то делаем что-то типа

MainWin( "$<вот тут ставим полное имя исполняемого файла>").CaptureBitmap( "<имя файла БМП , куда сохранять>" )

Это мы получим эталонный битмап.

А проверить его потом можно будет путем вызова VerifyBitmap метода или SYS_CompareBitmap - функции.

То есть хотя бы проверить, можно ли вот так рисунок выхватить
  • 0

#12 Hunter_ua

Hunter_ua

    Новый участник

  • Members
  • Pip
  • 47 сообщений
  • ФИО:Андрей

Отправлено 14 марта 2007 - 13:03

Не получается создать битмап, потому что метод Start ждет полной загрузки приложения, и выхватить Splash Win не удается, функция SYS_Execute тоже не работает. С помощью еще какой функции можно загрузить приложения и чтобы она не дожидалась загрузки MainWin??
  • 0

#13 KaNoN

KaNoN

    АЦЦКИЙ СОТОНА

  • Members
  • PipPipPipPipPipPip
  • 1 260 сообщений
  • ФИО:Колесник Николай
  • Город:Днепропетровск > Киев > Лондон

Отправлено 14 марта 2007 - 13:51

Есть WinAPI-шная функция ShellExecute, но я точно не помню из какой dll ее доставать. Поищите по данному форуму. По-моему, она здесь где-то проскакивала уже
  • 0

#14 KaNoN

KaNoN

    АЦЦКИЙ СОТОНА

  • Members
  • PipPipPipPipPipPip
  • 1 260 сообщений
  • ФИО:Колесник Николай
  • Город:Днепропетровск > Киев > Лондон

Отправлено 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


  • 0

#15 Hunter_ua

Hunter_ua

    Новый участник

  • Members
  • Pip
  • 47 сообщений
  • ФИО:Андрей

Отправлено 14 марта 2007 - 15:23

Не компилится :( Проблема с alias ("Syntax error -- alias"), путь к dll указать не забыл.
  • 0

#16 KaNoN

KaNoN

    АЦЦКИЙ СОТОНА

  • Members
  • PipPipPipPipPipPip
  • 1 260 сообщений
  • ФИО:Колесник Николай
  • Город:Днепропетровск > Киев > Лондон

Отправлено 14 марта 2007 - 15:27

alias в той же строке, что и объявление функции
  • 0

#17 Hunter_ua

Hunter_ua

    Новый участник

  • Members
  • Pip
  • 47 сообщений
  • ФИО:Андрей

Отправлено 14 марта 2007 - 16:30

так и было сделано. все равно Error...:(
  • 0

#18 KaNoN

KaNoN

    АЦЦКИЙ СОТОНА

  • Members
  • PipPipPipPipPipPip
  • 1 260 сообщений
  • ФИО:Колесник Николай
  • Город:Днепропетровск > Киев > Лондон

Отправлено 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"
  • 0

#19 Hunter_ua

Hunter_ua

    Новый участник

  • Members
  • Pip
  • 47 сообщений
  • ФИО:Андрей

Отправлено 15 марта 2007 - 08:22

Аага :crazy: сделал теперь вроде все правильно, но все-равно при компилировании появляется ошибка "Variable SW_SHOWNORMAL is not defined".
  • 0

#20 KaNoN

KaNoN

    АЦЦКИЙ СОТОНА

  • Members
  • PipPipPipPipPipPip
  • 1 260 сообщений
  • ФИО:Колесник Николай
  • Город:Днепропетровск > Киев > Лондон

Отправлено 15 марта 2007 - 08:35

Ну это какая-то константа. Попробуйте число вставить ( 0 например ).
Или, если поблизости есть Visual Studio, то найдите файл, где эта константа объявлена и объявите с таким же значением в Силке
  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных