KnigaRead.com/

Андрей Попов - Windows Script Host для Windows 2000/XP

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Андрей Попов, "Windows Script Host для Windows 2000/XP" бесплатно, без регистрации.
Перейти на страницу:

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

}

WScript.Echo("Выполнение завершено");

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

Рис. 1.12. Результат выполнения сценария ChildStatus.js 

Свойства StdOut, StdIn и StdErr

Работать c потоками StdOut, StdIn и StdErr объекта WshScriptExec можно с помощью тех же методов, которые применяются в объекте WScript для доступа к соответствующим стандартным потокам (см. табл. 1.3). Например, запустив приведенный в листинге 1.27 сценарий ConToWin.js с помощью wscript.exe, мы выведем в графическое окно информацию о ключах программы cscript.exe (рис. 1.13).

Рис. 1.13. Результат выполнения сценария ConToWin.js


Отметим, что запускаемое консольное приложение cscript.exe выводит символы кириллицы в DOS-кодировке, поэтому для вывода таких символов в графическое окно их нужно преобразовать в Windows-кодировку. В рассматриваемом сценарии это делается с помощью функции DosToWin, которая преобразует переданную в качестве параметра строку следующим образом: все символы кириллицы в этой строке переводятся в Windows-кодировку, остальные символы остаются без изменений:

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*