Проблемы с Sys.WaitChild и с Sys.WaitProcess
#1
Отправлено 26 августа 2010 - 13:48
JavaScript
На форме нажимаю кнопку вывода в Ексель и жду открытия Excel-документа 2мя способами:
//Sys.WaitProcess("EXCEL",30000);
Sys.WaitChild("EXCEL",30000);
и в обоих случаях у меня система сначала ждет это время (30000), и только потом идет реакция на нажатие кнопки (видно как потихоньку открывается эксель).
Но мне нужно как раз "подождать" именно открытие ексель приложения, а не делать тайм-аут перед реакцией на нажатие кнопки!
Чтоб наглядно было, код:
Aliases.RN_INFS_ExeClient.Window_Store_As.btn_Save.ClickButton(); // жму кнопку Save в окне "Сохранить как" - стандартное
//Sys.WaitProcess("EXCEL",30000);
Sys.WaitChild("EXCEL",30000); // собственно жду
if ((Aliases.EXCEL.wndXLMAIN.XLDESK.wndEXCEL7.Exists)&&(Aliases.EXCEL.wndXLMAIN.XLDESK.wndEXCEL7.Enabled))
{
Aliases.EXCEL.wndXLMAIN.XLDESK.wndEXCEL7.Close(5000); // хочу попасть сюда
}
else
{Log.Message("Не открыт файл в Excel");} // но попадаю естественно сюда, т.к. открываться окно Aliases.EXCEL.wndXLMAIN.XLDESK.wndEXCEL7 начинает ТОЛЬКО после Sys.WaitChild("EXCEL",30000), а надо чтоб оно открывалось именно как раз в это время
Помогите пожалуйста разобраться :(
#2
Отправлено 27 августа 2010 - 07:31
А попробуйте использовать Sys.WaitProcess("EXCEL",-1);
(процесс должен ожидаться бесконечное время)
ЧТо будет у вас: скрипт "зависнит" в ожидании или все же откроется EXCEL
#3
Отправлено 27 августа 2010 - 07:50
Сообщение отредактировал Rebz: 27 августа 2010 - 09:58
#4
Отправлено 27 августа 2010 - 08:53
На VBS это было бы для вашего случая так:
Runner.CallObjectMethodAsync (Aliases.RN_INFS_ExeClient.Window_Store_As.btn_Save, "ClickButton")
ps. посмотрите хелп по CallObjectMethodAsync
#5
Отправлено 27 августа 2010 - 09:32
Попробуйте в ТС7 отключить Name Mapping. И поймать объект снова - столько же будет полей отображаться как и при NM?
А Fox PRO собрано как открытое приложение?
Rebz, ты не в том вопросе написал коммент. Про FoxPro это в другор месте :)
#6
Отправлено 04 сентября 2010 - 00:09
Из кода понял, что нужно дождаться открытия книги в Excel, а затем закрыть Excel - я правильно понял задачу, что от вас требуется или нет?
#7
Отправлено 04 сентября 2010 - 14:24
Он требует не имя процесса а именно имя дочернего обьекта, в вашем случае это будет не EXCEL а Process("Excel")
Попробуйте так:
Sys.WaitChild('Process("EXCEL")',-1);
Насчет WaitProcess - должно работать так как вы и написали.
#8
Отправлено 20 сентября 2010 - 12:48
Здравствуйте.
Попробуйте так:Sys.WaitProcess("EXCEL", 1, 30000);
Дмитрий
#9
Отправлено 20 сентября 2010 - 13:47
попробуйте так сразу через проверку. пример на VBS. Проверил все хорошо определяет и не ждет 3 секунды...
if Sys.WaitProcess("EXCEL",3000).exists then
'some code
end if
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных