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

Фотография

Проблемы с Sys.WaitChild и с Sys.WaitProcess


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

#1 acinka

acinka

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

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

Отправлено 26 августа 2010 - 13:48

ТС 7.5
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), а надо чтоб оно открывалось именно как раз в это время


Помогите пожалуйста разобраться :(
  • 0

#2 VitalyD

VitalyD

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

  • Members
  • PipPipPipPip
  • 285 сообщений
  • Город:Санкт-Петербург

Отправлено 27 августа 2010 - 07:31

Оченеь странно конечно.
А попробуйте использовать Sys.WaitProcess("EXCEL",-1);
(процесс должен ожидаться бесконечное время)

ЧТо будет у вас: скрипт "зависнит" в ожидании или все же откроется EXCEL




  • 0

#3 Rebz

Rebz

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

  • Members
  • PipPipPipPip
  • 471 сообщений


Отправлено 27 августа 2010 - 07:50

delete :)

Сообщение отредактировал Rebz: 27 августа 2010 - 09:58

  • 0

#4 anagramma

anagramma

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

  • Members
  • PipPip
  • 87 сообщений
  • Город:Moskow

Отправлено 27 августа 2010 - 08:53

Попробуйте ассинхронный вызов нажатия кнопки
На VBS это было бы для вашего случая так:


Runner.CallObjectMethodAsync (Aliases.RN_INFS_ExeClient.Window_Store_As.btn_Save, "ClickButton")


ps. посмотрите хелп по CallObjectMethodAsync
  • 0

#5 VitalyD

VitalyD

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

  • Members
  • PipPipPipPip
  • 285 сообщений
  • Город:Санкт-Петербург

Отправлено 27 августа 2010 - 09:32

Попробуйте в ТС7 отключить Name Mapping. И поймать объект снова - столько же будет полей отображаться как и при NM?
А Fox PRO собрано как открытое приложение?



Rebz, ты не в том вопросе написал коммент. Про FoxPro это в другор месте :)
  • 0

#6 TC_Noob

TC_Noob

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

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

Отправлено 04 сентября 2010 - 00:09

Кажется автор забыл сказать, что должно происходить, после того как запуститься Excel?
Из кода понял, что нужно дождаться открытия книги в Excel, а затем закрыть Excel - я правильно понял задачу, что от вас требуется или нет? :pardon:
  • 0

#7 Paulitto

Paulitto

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

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

Отправлено 04 сентября 2010 - 14:24

Похоже что вы просто передаете неправильное значение в WaitChild методе.
Он требует не имя процесса а именно имя дочернего обьекта, в вашем случае это будет не EXCEL а Process("Excel")

Попробуйте так:
Sys.WaitChild('Process("EXCEL")',-1);

Насчет WaitProcess - должно работать так как вы и написали.
  • 0

#8 Dmitry N

Dmitry N

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 742 сообщений
  • ФИО:Николаев Дмитрий
  • Город:Где-то в России

Отправлено 20 сентября 2010 - 12:48


Здравствуйте.

Попробуйте так:Sys.WaitProcess("EXCEL", 1, 30000);

  • 0
С уважением,
Дмитрий

#9 alegzander_

alegzander_

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

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

Отправлено 20 сентября 2010 - 13:47

Здравствуйте.
попробуйте так сразу через проверку. пример на VBS. Проверил все хорошо определяет и не ждет 3 секунды...

if Sys.WaitProcess("EXCEL",3000).exists then
'some code
end if
  • 0


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

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