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

ЖАНРЫ

Windows Script Host для Windows 2000/XP

Попов Андрей Викторович

Шрифт:

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

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

while (!Processes.atEnd) {

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

 Process=Processes.item;

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

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

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

 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="Запущенные процессы\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
, который завершает этот процесс:

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

Поделиться с друзьями: