Работа с двумя процессами.
#1
Отправлено 20 октября 2009 - 09:28
Sys["Process"]("TimeZYX.MasterFrame")["WinFormsObject"]("MainForm")["WinFormsObject"]("MdiClient", "")["WinFormsObject"]("ProcessingDialog")
Заполняются поля, типа:
Sys["Process"]("приложение")["WinFormsObject"]("MainForm")["WinFormsObject"]("MdiClient", "")["WinFormsObject"]("ProcessingDialog")["WinFormsObject"]("tableLayoutPanel1")["WinFormsObject"]("tabControl")["WinFormsObject"]("optionsPage")["WinFormsObject"]("MKTModelCreateControl")["WinFormsObject"]("tableLayoutPanel1")["WinFormsObject"]("tableLayoutPanel2")["WinFormsObject"]("pcEditKeyWord")["WinFormsObject"]("TextEditControl")["WinFormsObject"]("splitContainerControl1")["WinFormsObject"]("SplitGroupPanel", "Panel1")["WinFormsObject"]("textEdit1")["WinFormsObject"]("TextBoxMaskBox", "")
По заполнении необходимых полей, открываем аналогичное второе окно (при просмотре в Object Browser у него другой Index и Id).
Sys["Process"]("TimeZYX.MasterFrame")["WinFormsObject"]("MainForm")["WinFormsObject"]("MdiClient", "")["WinFormsObject"]("ProcessingDialog")
НО кликать в нем на те же поля, что и в предыдущем окне не получается, т.к. ТС ругается на перекрывающиеся окна.
Оverlapping window
Т.е. при записи KeywordTest в новом окне - всё нормально, а при воспроизведении - ошибка.
Как быть? :(
#2
Отправлено 20 октября 2009 - 15:25
Поробуйте найти это окно, а потом уже кликать. Если вы говорите, что у него другой ИД, поробуйте по нему и найти. Можно попробовать Sys.FindIdРабота в программе происходит в отдельном окне:
Sys["Process"]("TimeZYX.MasterFrame")["WinFormsObject"]("MainForm")["WinFormsObject"]("MdiClient", "")["WinFormsObject"]("ProcessingDialog")
Заполняются поля, типа:
Sys["Process"]("приложение")["WinFormsObject"]("MainForm")["WinFormsObject"]("MdiClient", "")["WinFormsObject"]("ProcessingDialog")["WinFormsObject"]("tableLayoutPanel1")["WinFormsObject"]("tabControl")["WinFormsObject"]("optionsPage")["WinFormsObject"]("MKTModelCreateControl")["WinFormsObject"]("tableLayoutPanel1")["WinFormsObject"]("tableLayoutPanel2")["WinFormsObject"]("pcEditKeyWord")["WinFormsObject"]("TextEditControl")["WinFormsObject"]("splitContainerControl1")["WinFormsObject"]("SplitGroupPanel", "Panel1")["WinFormsObject"]("textEdit1")["WinFormsObject"]("TextBoxMaskBox", "")
По заполнении необходимых полей, открываем аналогичное второе окно (при просмотре в Object Browser у него другой Index и Id).
Sys["Process"]("TimeZYX.MasterFrame")["WinFormsObject"]("MainForm")["WinFormsObject"]("MdiClient", "")["WinFormsObject"]("ProcessingDialog")
НО кликать в нем на те же поля, что и в предыдущем окне не получается, т.к. ТС ругается на перекрывающиеся окна.
Оverlapping window
Т.е. при записи KeywordTest в новом окне - всё нормально, а при воспроизведении - ошибка.
Как быть? :(
#3
Отправлено 21 октября 2009 - 04:51
Если ТС ругается на overlapping окна, то он должен говорить что это за окна. Попробуйте определить что это за окна (картинку в лог сбросьте, например). Возможно, это поможет найти причину проблемы.
Дмитрий
#4
Отправлено 21 октября 2009 - 06:13
#5
Отправлено 21 октября 2009 - 11:54
Id не пойдет - он каждый раз генерируется заново. (вобщем-то как и Index)Поробуйте найти это окно, а потом уже кликать. Если вы говорите, что у него другой ИД, поробуйте по нему и найти. Можно попробовать Sys.FindId
Да, картинка в логе приводится - как раз новое открытое окно, но проблему это решить не помогает....
Если ТС ругается на overlapping окна, то он должен говорить что это за окна. Попробуйте определить что это за окна (картинку в лог сбросьте, например). Возможно, это поможет найти причину проблемы.
Только вот какие действия?..Кстати, в ТС можно подписаться на событие overlapping window. В обработчике, как вариант, можете выполнить необходимые действия.
#6
Отправлено 21 октября 2009 - 15:23
вопрос - как выбрать правильный
#7
Отправлено 22 октября 2009 - 05:35
Всё ясно, новое и старое окна имеют одно и то же имя. Скрипт пытается работать со старым и новое ему мешает. Надо использовать версию метода WinFormsObject, которая позволяет обращаться к объектам по индексу, вместо используемой по умолчанию, которая обращается к объектам исключительно по их нативному имени. Скорее всего, у нового окна индекс будет 1, так как оно лежит сверху.Да, картинка в логе приводится - как раз новое открытое окно, но проблему это решить не помогает.
Sys["Process"]("TimeZYX.MasterFrame")["WinFormsObject"]("MainForm")["WinFormsObject"]("MdiClient", "")["WinFormsObject"]("<WindowClass>", "<WindowCaption>", 1)
Дмитрий
#8
Отправлено 22 октября 2009 - 07:30
#9
Отправлено 22 октября 2009 - 07:43
Здравствуйте.
...Скорее всего, у нового окна индекс будет 1, так как оно лежит сверху.
Sys["Process"]("TimeZYX.MasterFrame")["WinFormsObject"]("MainForm")["WinFormsObject"]("MdiClient", "")["WinFormsObject"]("<WindowClass>", "<WindowCaption>", 1)
Да, так и есть, индекс у нового окна становится 1, но вот ТС всё равно не хочет различать объекты по жестко прописанному индексу - ругается - нет такого объекта.
#10
Отправлено 28 октября 2009 - 14:19
Попробуйте Refresh позвать перед работой со вторым окном:
Sys["Process"]("TimeZYX.MasterFrame")["WinFormsObject"]("MainForm")["Refresh"](); var wnd = Sys["Process"]("TimeZYX.MasterFrame")["WinFormsObject"]("MainForm")["WinFormsObject"]("MdiClient", "")["WinFormsObject"]("<WindowClass>", "<WindowCaption>", 1);
Дмитрий
#11
Отправлено 29 октября 2009 - 05:00
Да, спасибо, пробовал рефрешиться, но почему-то не помогло. Возможно, что-то не так и не там указал. Пока что привязался по Id к процессам....
Попробуйте Refresh позвать перед работой со вторым окном:
...
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных