Чтение онлайн

на главную - закладки

Жанры

Windows Script Host для Windows 2000/XP

Попов Андрей Викторович

Шрифт:

Кроме этого, имеется возможность запустить сценарий, файл с которым находится на локальной машине, на другой удаленной машине. Для выполнения сценариев на удаленных машинах и обработки ошибок, возникающих в таких сценариях, используются объекты

WshController
,
WshRemote
и
WshRemoteError
.

Объект WshScriptExec

В WSH 5.6 появилась возможность при помощи метода

WshShell.Exec
запускать консольное приложение или сценарий как дочерний процесс выполняемого сценария, т.е. с теми же переменными
среды, что и у процесса-родителя. Метод
WshShell.Exec
выполняет командную строку, указанную в качестве его параметра, и возвращает объект
WScriptExec
, свойства и методы которого предоставляют информацию о запущенной задаче и обеспечивают доступ к ее стандартным потокам ввода/вывода и ошибок (обработка этих потоков необходима в силу того, что непосредственно на экране строки, выводимые дочерним приложением, не появляются).

Отметим также, что с помощью метода

WshShell.Exec
можно запускать и графические оконные Windows-приложения. В этом случае создаваемый объект
WshScriptExec
полезен тем, что он позволяет получить идентификатор запущенного процесса (Process ID, PID), который затем можно использовать для активизации задачи при помощи метода
WshShell.AppActivate
.

Объект

WScriptExec
имеет единственный метод
Terminate
, с помощью которого можно прервать выполнение дочернего процесса.

Например:

var WshShell=WScript.CreateObject("WScript.Shell");

var ChildJob = WshShell.Exec("cscript ChildScript.js");

ChildJob.Terminate;

Метод

Terminate
пытается закрыть приложение, посылая ему сообщение
WM_CLOSE
. Если это не срабатывает, задача завершается принудительно. Методом
Terminate
нужно пользоваться только в крайнем случае, т.к. некоторые приложения, завершенные таким способом, не полностью освобождают ресурсы. Поэтому, как правило, лучше дождаться, когда запущенная задача сама закончит свою работу.

Свойства объекта

WshScriptExec
описаны в табл. 1.18.

Таблица 1.18. Свойства объекта

WshScriptExec

Свойство Описание
ExitCode
Содержит код выхода, устанавливаемый дочерней задачей при завершении выполнения
ProcessID
Содержит идентификатор процесса (ProcessID, PID), которому соответствует объект
WshScriptExec
Status
Содержит информацию о ходе выполнения дочерней задачи
StdOut
Позволяет сценарию-родителю считывать информацию из стандартного выходного потока запущенной дочерней задачи
StdIn
Позволяет сценарию-родителю записывать информацию в стандартный входной поток запущенной дочерней задачи
StdErr
Позволяет сценарию-родителю считывать информацию из стандартного потока ошибок запущенной дочерней задачи 

Свойство ProcessID

В следующем

примере (сценарий MakeCalc.js) свойство
ProcessID
используется для активизации стандартного калькулятора Windows. Напомним, что для этой цели также можно при вызове метода
WshShell.AppActivate
использовать название окна "Calculator".

Листинг 1.25. Активизация приложений с помощью PID

/*****************************************************************/

/* Имя: MakeCalc.js */

/* Язык: JScript */

/* Описание: Активизация приложений с помощью PID */

/*****************************************************************/

var WshShell, theCalculator;

//Создаем объект WshShell

WshShell = WScript.CreateObject("WScript.Shell");

//Запускаем калькулятор

theCalculator = WshShell.Exec("calc");

//Приостанавливаем выполнение сценария для того, чтобы окно

//калькулятора появилось на экране

WScript.Sleep(500);

//Активизируем окно калькулятора

WshShell.AppActivate(theCalculator.ProcessID);

//Посылаем нажатия клавиш в окно калькулятора

WshShell.SendKeys("1{+}");

WScript.Sleep(500);

WshShell.SendKeys("2");

WScript.Sleep(500);

WshShell.SendKeys("~");

/************* Конец *********************************************/
 

Свойство Status

После запуска дочернего процесса сценарий-родитель продолжает выполняться асинхронно, поэтому необходимо уметь определять, выполняется ли еще запущенная задача, или она уже завершена. Для этой цели используется свойство

Status
: если значение
Status
равно 0, то это означает, что дочерний процесс находится в стадии выполнения, если
Status
равно 1, то запущенная задача уже завершена. Например, в результате выполнения приведенного в листинге 1.26 сценария ChildStatus.js на экран выведется несколько строк "Команда еще выполняется" (рис. 1.12).

Листинг 1.26. Контроль состояния дочернего процесса

/*****************************************************************/

/* Имя: ChildStatus.js */

/* Язык: JScript */

/* Описание: Контроль состояния дочернего процесса */

/*****************************************************************/

var WshShell,theJob;

//Создаем объект WshShell

WshShell=WScript.CreateObject("WScript.Shell");

//Запускаем дочернее приложение

theJob = WshShell.Exec("xcopy /?");

for (;;) {

 if (theJob.status==1) //Проверяем завершение дочернего процесса

break; //Выходим из цикла

 else WScript.Echo("Команда еще выполняется");

}

Поделиться:
Популярные книги

Печать Пожирателя

Соломенный Илья
1. Пожиратель
Фантастика:
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Печать Пожирателя

Привет из Загса. Милый, ты не потерял кольцо?

Лисавчук Елена
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Привет из Загса. Милый, ты не потерял кольцо?

Мастер 2

Чащин Валерий
2. Мастер
Фантастика:
фэнтези
городское фэнтези
попаданцы
технофэнтези
4.50
рейтинг книги
Мастер 2

Нечто чудесное

Макнот Джудит
2. Романтическая серия
Любовные романы:
исторические любовные романы
9.43
рейтинг книги
Нечто чудесное

Клан

Русич Антон
2. Долгий путь домой
Фантастика:
боевая фантастика
космическая фантастика
5.60
рейтинг книги
Клан

Имя нам Легион. Том 3

Дорничев Дмитрий
3. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 3

Запасная дочь

Зика Натаэль
Фантастика:
фэнтези
6.40
рейтинг книги
Запасная дочь

Убивать чтобы жить 7

Бор Жорж
7. УЧЖ
Фантастика:
героическая фантастика
космическая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 7

У врага за пазухой

Коваленко Марья Сергеевна
5. Оголенные чувства
Любовные романы:
остросюжетные любовные романы
эро литература
5.00
рейтинг книги
У врага за пазухой

Кодекс Охотника. Книга XXI

Винокуров Юрий
21. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XXI

Генерал Скала и ученица

Суббота Светлана
2. Генерал Скала и Лидия
Любовные романы:
любовно-фантастические романы
6.30
рейтинг книги
Генерал Скала и ученица

Оцифрованный. Том 1

Дорничев Дмитрий
1. Линкор Михаил
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Оцифрованный. Том 1

Его маленькая большая женщина

Резник Юлия
Любовные романы:
современные любовные романы
эро литература
8.78
рейтинг книги
Его маленькая большая женщина

Хуррит

Рави Ивар
Фантастика:
героическая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Хуррит