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

Фотография

Ожидание окна при меняющемся WndClass


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

#1 Десятыч

Десятыч

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

  • Members
  • Pip
  • 10 сообщений
  • ФИО:Кирилл

Отправлено 28 сентября 2011 - 06:27

Здравствуйте. Возникла такая проблема.

Запускаю приложение и проверяю поялвение окна WaitWindow.
На одной машине параметр WndClass имеет, например такое значение: «WindowsForms10.Window.8.app.0.2e0c681» Но на других машинах или версиях тестируемого приложения, он меняется и код не срабатывает.
Приложение на C#.
Подскажите, пожалуйста, как правильно ждать появления нужного окна.
  • 0

#2 kazachis4e

kazachis4e

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

  • Members
  • Pip
  • 8 сообщений

Отправлено 28 сентября 2011 - 08:46

Здравствуйте. Возникла такая проблема.

Запускаю приложение и проверяю поялвение окна WaitWindow.
На одной машине параметр WndClass имеет, например такое значение: «WindowsForms10.Window.8.app.0.2e0c681» Но на других машинах или версиях тестируемого приложения, он меняется и код не срабатывает.
Приложение на C#.
Подскажите, пожалуйста, как правильно ждать появления нужного окна.


А какие еще значения может принимать параметр WndClass? Если все варианты имеют какую-либо неизменную часть, которая однозначно идентифицирует данный класс - то можно попробовать заменить изменяющуюся часть на "*", например "WindowsForms10.Window.8.app*" или "WindowsForms*". Звездочка здесь означает любую строку любой длинны, в том числе пустую.
А если данный параметр принимает вообще любые значения - то можно вместо метода WaitWindow воспользоваться например FindChild, где указать те свойства и их значения, которые смогут однозначно идентифицировать искомое окно, например свойство Caption.
  • 0

#3 Десятыч

Десятыч

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

  • Members
  • Pip
  • 10 сообщений
  • ФИО:Кирилл

Отправлено 28 сентября 2011 - 09:14


Здравствуйте. Возникла такая проблема.

Запускаю приложение и проверяю поялвение окна WaitWindow.
На одной машине параметр WndClass имеет, например такое значение: «WindowsForms10.Window.8.app.0.2e0c681» Но на других машинах или версиях тестируемого приложения, он меняется и код не срабатывает.
Приложение на C#.
Подскажите, пожалуйста, как правильно ждать появления нужного окна.


А какие еще значения может принимать параметр WndClass? Если все варианты имеют какую-либо неизменную часть, которая однозначно идентифицирует данный класс - то можно попробовать заменить изменяющуюся часть на "*", например "WindowsForms10.Window.8.app*" или "WindowsForms*". Звездочка здесь означает любую строку любой длинны, в том числе пустую.
А если данный параметр принимает вообще любые значения - то можно вместо метода WaitWindow воспользоваться например FindChild, где указать те свойства и их значения, которые смогут однозначно идентифицировать искомое окно, например свойство Caption.

Да, в WndClass меняются последние 7 символов, то есть вариант с "WindowsForms10.Window.8.app*" подошёл бы, но на экране есть ещё приложения такого же типа, которые подпадают под маску "WindowsForms10.Window.8.app*", так что пока надеюсь этого избежать.
Искомое окно - это первое, главное окно программы. Если использовать FindChild - то потомком какого объекта оно должно считаться ?
  • 0

#4 Kissmybass

Kissmybass

    Активный участник

  • Members
  • PipPip
  • 98 сообщений


Отправлено 28 сентября 2011 - 09:45

Извините что влезаю в тему, а можете обьяснить как работает FindChild на примере, ато то что написано в мануале ТС не совсем понятно ))
  • 0

#5 kazachis4e

kazachis4e

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

  • Members
  • Pip
  • 8 сообщений

Отправлено 28 сентября 2011 - 11:01

на экране есть ещё приложения такого же типа, которые подпадают под маску

Метод WaitWindow вызывается у кого-либо объекта/процесса и ищет именно те окна, которые являются дочерними. Например если у нас в системе запущено несколько калькуляторов, и допустим у всех у них открыто окно "О программе", и вы пишите Sys.Process("Calc", 3).WaitWindow("О программе"), то он найдет именно то окно, которое является дочерним к процессу Sys.Process("Calc"), другие окна других калькуляторов он даже не увидит. Другое дело если у вас на том же уровне в дереве ObjectBrowser существует несколько окон, попадающих под эту маску, тогда да.

На счет потомка - скорее всего оно будет потомком процесса Sys.Process("MyProcess"), но не факт, это лучше всего посмотреть в ObjectBrowser.
  • 0

#6 modbear

modbear

    Специалист

  • Members
  • PipPipPipPipPip
  • 548 сообщений

Отправлено 28 сентября 2011 - 13:10

Приложение на C#.

Для .NET приложений надо использовать WaitWinFormsObject - он ищет окна по имени или .NET-классу.
  • 0

#7 Десятыч

Десятыч

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

  • Members
  • Pip
  • 10 сообщений
  • ФИО:Кирилл

Отправлено 28 сентября 2011 - 18:07

Большое спасибо!
  • 0

#8 Десятыч

Десятыч

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

  • Members
  • Pip
  • 10 сообщений
  • ФИО:Кирилл

Отправлено 29 сентября 2011 - 05:02

Вот аналогичный вопрос Внезапно возник:
Есть ли такой же специфический метод для поиска окон на библиотеке QT ?
Все окна в такой программе имеют WndClass "QWidget"
  • 0

#9 modbear

modbear

    Специалист

  • Members
  • PipPipPipPipPip
  • 548 сообщений

Отправлено 29 сентября 2011 - 05:08

Есть ли такой же специфический метод для поиска окон на библиотеке QT ?

WaitQtObject
  • 0


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

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