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

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

Жанры

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("Команда еще выполняется");

}

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

Светлейший князь

Злотников Роман Валерьевич
4. Император и трубочист
Фантастика:
героическая фантастика
альтернативная история
5.00
рейтинг книги
Светлейший князь

Хозяин Теней 3

Петров Максим Николаевич
3. Безбожник
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Хозяин Теней 3

Сфирот

Прокофьев Роман Юрьевич
8. Стеллар
Фантастика:
боевая фантастика
рпг
6.92
рейтинг книги
Сфирот

Юнлинг

Метельский Николай Александрович
Фантастика:
героическая фантастика
космическая фантастика
попаданцы
8.35
рейтинг книги
Юнлинг

Я все еще князь. Книга XXI

Дрейк Сириус
21. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я все еще князь. Книга XXI

Бояръ-Аниме. Газлайтер. Том 33

Володин Григорий Григорьевич
33. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Бояръ-Аниме. Газлайтер. Том 33

Развод, который ты запомнишь

Рид Тала
1. Развод
Любовные романы:
остросюжетные любовные романы
короткие любовные романы
5.00
рейтинг книги
Развод, который ты запомнишь

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

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

Личный аптекарь императора. Том 6

Карелин Сергей Витальевич
6. Личный аптекарь императора
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Личный аптекарь императора. Том 6

Двойник короля 15

Скабер Артемий
15. Двойник Короля
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Двойник короля 15

Черный Маг Императора 7 (CИ)

Герда Александр
7. Черный маг императора
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Черный Маг Императора 7 (CИ)

Наномашины, внучок! Том 2

Новиков Николай Васильевич
2. Чего смотришь? Иди книгу читай
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Наномашины, внучок! Том 2

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

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

Запечатанный во тьме. Том 1. Тысячи лет кача

NikL
1. Хроники Арнея
Фантастика:
уся
эпическая фантастика
фэнтези
5.00
рейтинг книги
Запечатанный во тьме. Том 1. Тысячи лет кача