Не работает скрипт при свернутом терминальном окне #212734


#0 by jk3
Хочу сделать выгрузку данных из ~30 баз. Написал обработку, которая подключается к базам поочередно по OLE и выгружает нужные мне данные в файл. Проблема в том, что при старте базы появляется окно: Предупреждение("Сегодня...bla, bla"); без таймаута, т.е. будет висеть до бесконечности пока юзер не нажмет кнопку OK/ENTER. Соответственно останавливается и ждет обработка, которая запускает базы. Как обычно, через 2 минуты всплывает окно "Сервер занят". Глобальный модуль редактировать не могу. Если поставить таймаут, то все OK, окошко ждет допустим 1 минуту и закрывается, запускается обработка и все хорошо. Для решения этой проблемы написал простенький скрипт, который висит 2 часа (где-то столько идет выгрузка из всех баз) и через каждые полминуты активизирует окно с заголовком "1С:Предприятие" и программно нажимает кнопку Enter. Ну так вот, если всё это время находится в терминальной сессии, то все работает. Если окно терминальной сессии свернуть, то скрипт не работает. Заново разворачиваешь, ждешь полминуты, скрипт срабатывает, и выгрузка продолжается. Вопрос. Как сделать так, чтобы периодически не открывать терминальное окно, т.е. чтобы скрипт работал и при свернутой терминальной сессии. // Server2003+TerminalClient
#1 by ТелепатБот
#2 by smaharbA
неверно активизируешь, да и вообще ерунда это жмакать кнопари програмно
#3 by jk3
Да, забыл, этот скрипт лежит в отдельном .js файле, запускается из обработки как ЗапуститьПриложение(КаталогИБ + "killWindow.js");. После этой строки запускается процесс wscript.exe А насчет программного нажатия кнопок, то как по-другому без моего участия? Чтобы запустил и работало. Вопрос-то: Почему скрипт, какой бы он ни был, не работает при свернутом терминальном окне. 1С-ка работает, а скрипт нет.
#4 by smaharbA
скрипт работает, проста нет активного окна, да и нажатия передаются не активному а фореграунд окну
#5 by jk3
Хм... ну если проходит WShell.AppActivate("1С:Предприятие") == true, то соответственно     WShell.SendKeys("{ENTER}"); должно передаваться в только что активизированное окно. При активном терминальном окне работает, а вот при неактивном - нет. Еще поправка: вместо WShell.Quit; должно быть WScript.Quit; // просто уже прошло 2 часа и скрипт вывалился с ошибкой.
#6 by smaharbA
савсем не обязательно
#7 by jk3
Написал еще скрипт для проверки гипотезы while (count < 15) { Т.е. всплывает messageBox с числом count, висит 2 сек, закрывается. Потом через 5 сек следующее окно с числом count+1 и т.д. Работает и в свернутом и в развернутом состоянии. Т.о. проблема в передаче фокуса ввода. >>Как сделать, чтобы окно не только активизировалось, а и делалось что-то типа BringOnTop, чтобы точно фокус ввода был на нем? Тогда по идее все заработает. Вот только что-то такой функции я в описании Windows Script не нахожу :(
#8 by jk3
Видно, ни у кого таких проблем не было... Думал скриптом отделаюсь, а наверное придется писать прогу (.exe) которая это бы делала.
#9 by jk3
Если у кого есть предложения, пишите прямо здесь.
#10 by jk3
Возможно мое решение будет полезно еще кому-нибудь:) 1) WShell.AppActivate("1С:Предприятие") работает на 99.9% только когда сам не переключаешь окна, и не двигаешь мышью. В остальных случаях может не срабатывать. 2) В свернутом состоянии в терминальной сессии не срабатывает программное нажатие кнопок. т.е. WShell.SendKeys("{ENTER}"), даже если клавиша и посылается (что сомнительно), но не доходит до активного окна. 3) В WMI нет функций работы с окнами, только с процессами => нужно использовать   внешнее приложение. 4) Решение см. ниже. cmdow.exe - бесплатная программка (, 15KB zip)для расширенной работы с окнами. /cls - закрыть окно с заданным заголовком.   Скрипт будет работать пока запущена хоть одна 1С-ка. Проверка каждые 10 секунд.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С