WMI=GetObject('winMgmts:');

} catch (e) {

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

 if (е != 0) {

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

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

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

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

  WScript.Quit();

 }

}

Запущенным процессам соответствует класс Process схемы Win32. Коллекция всех процессов создается с помощью выполнения следующего SQL-запроса:

SELECT * FROM Win32 Process

Таким образом, можно сказать, что класс Win32_Process является аналогом таблицы базы данных; сам запрос выполняется с помощью метода ExecQuery():

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

После создания коллекции мы просматриваем в цикле while все ее элементы, каждый из которых соответствует одному процессу, и добавляем имя процесса, хранящееся в свойстве Name, к переменной SList:

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

SList='Запущенные процессы ';

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

while (!Processes.atEnd()) {

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

 Process=Processes.item();

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

 SList+=Process.Name+' ';

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

 Processes.moveNext();

}

После выхода из цикла переменная SInfo выводится на экран с помощью метода Echo() объекта WScript:

WScript.Echo(SInfo);

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

Листинг 11.21. Вывод на экран списка всех запущенных процессов

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

/* Имя: ListProcesses.js                                            */

/* Язык: JScript                                                    */

/* Описание: Вывод на экран списка всех запущенных на локальной     */

/*           рабочей станции процессов                              */

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

var

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

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

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

 SList;     //Строка для вывода на экран

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

var vbCritical=16;

try  {

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

 WMI=GetObject('winMgmts:');

} 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='Запущенные процессы ';

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

while (!Processes.atEnd()) {

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

 Process=Processes.item();

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

 SList+=Process.Name+' ';

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

 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'. Для этого мы

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату