Выбрать главу

} catch (e) {  //Обрабатываем возможные ошибки

 if (e != 0) {

  //Выводим сообщение об ошибке

  Mess="Ошибка при соединении с WMI";

  WshShell.Popup(Mess,0,"Запущенные процессы",vbCritical);

  //Выходим из сценария

  WScript.Quit();

 }

}

//Создаем коллекцию всех запущенных процессов

Processes=new Enumerator(WMI.ExecQuery("SELECT * FROM Win32_Process"));

//Инициализируем строку SList

SList="Запущенные процессы\n\n";

//Цикл по всем элементам коллекции

while (!Processes.atEnd()) {

 //Извлекаем текущий элемент коллекции (запущенный процесс)

 Process=Processes.item();

 //Формируем строку с именами процессов

 SList+=Process.Name+"\n";

 //Переходим к следующему элементу коллекции

 Processes.moveNext();

}

//Выводим информацию на экран

WScript.Echo(SList);

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

Закрытие всех экземпляров запущенного приложения

WMI позволит нам закрывать сразу все экземпляры какого-либо запущенного приложения.

В сценарии KillNotepads.js мы будем закрывать все копии Блокнота (Notepad.exe). Как и в предыдущем примере, сначала мы соединяемся с WMI внутри блока try конструкции try…catch:

try {

 //Соединяемся с WMI

 WMI=GetObject("winMgmts:");

} catch (e) {

 //Обрабатываем возможные ошибки

 if (e != 0) {

  //Выводим сообщение об ошибке Mess="Ошибка при соединении с WMI";

  WshShell.Popup(Mess, 0, "Закрытие всех Блокнотов", vbCritical);

  //Выходим из сценария

  WScript.Quit();

 }

}

Далее нам нужно получить коллекцию всех процессов с именем "Notepad.exe". Для этого мы выполняем соответствующий SQL-запрос, текст которого предварительно заносится в переменную SQuery:

//Формируем текст запроса

SQuery="SELECT * FROM Wln32_Process WHERE Name='Notepad.exe'"

//Создаем коллекцию-результат запроса

Processes=new Enumerator(WMI.ExecQuery(SQuery));

Теперь, имея коллекцию нужных нам процессов, мы в цикле while перебираем все ее элементы, вызывая для каждого элемента (запущенного экземпляра Блокнота) метод Terminate(), который завершает этот процесс:

//Цикл по всем элементам коллекции

while (!Processes.atEnd()) {

 //Извлекаем текущий элемент коллекции (процесс с именем Notepad.exe)

 Process=Processes.item();

 try {

  //Завершаем процесс

  Process.Terminate();

 } catch (e) {

  //Обрабатываем возможные ошибки if (e != 0) {

  //Выводим сообщение об ошибке

  Mess="Ошибка при закрытии текущего экземпляра";

  WshShell.Popup(Mess, 0, "Закрытие всех Блокнотов", vbCritical);

 }

}

//Переходим к следующему элементу коллекции

Processes.moveNext();

Полностью текст сценария KillNotepads.js приведен в листинге 11.22.

Листинг 11.22. Закрытие всех запущенных экземпляров Блокнота

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

/* Имя: KillNotepads.js                                             */

/* Язык: JScript                                                    */

/* Описание: Закрытие всех запущенных экземпляров Блокнота          */

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

var

 WMI,       //Экземпляр WMI

 SQuery,    //Текст запроса

 Processes, //Коллекция процессов

 Process,   //Экземпляр коллекции

 WshShell;  //Объект WshShell

//Инициализируем константы для диалоговых окон

var vbCritical=16;

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

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

try {

 //Соединяемся с WMI

 WMI=GetObject("winMgmts:");

} catch (e) {  //Обрабатываем возможные ошибки

 if (e != 0) {

  //Выводим сообщение об ошибке

  Mess="Ошибка при соединении с WMI";

  WshShell.Popup(Mess,0,"Закрытие всех Блокнотов",vbCritical);

  //Выходим из сценария

  WScript.Quit();

 }

}

//Формируем текст запроса 

SQuery="SELECT * FROM Win32_Process WHERE Name='Notepad.exe'"

//Создаем коллекцию-результат запроса

Processes=new Enumerator(WMI.ExecQuery(SQuery));

//Цикл по всем элементам коллекции

while (!Processes.atEnd()) {

 //Извлекаем текущий элемент коллекции (процесс с именем Notepad.exe)