Книга: Windows Script Host для Windows 2000/XP

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

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

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)
 Process=Processes.item();
 try { 
  //Завершаем процесс
  Process.Terminate();
 } catch (e) {  //Обрабатываем возможные ошибки
  if (e != 0) {
   //Выводим сообщение об ошибке
   Mess="Ошибка при закрытии текущего экземпляра";
   WshShell.Popup(Mess,0,"Закрытие всех Блокнотов",vbCritical);
  }
 }
 //Переходим к следующему элементу коллекции 
 Processes.moveNext();
}
/*************  Конец *********************************************/

Оглавление книги


Генерация: 1.209. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз