Получение списка процессов средствами командной строки и сервера Windows Script Host

Получение списка процессов средствами командной строки и сервера Windows Script Host Примеры скриптов и макросов для Word и WSH

В этой статье мы рассмотрим, как получить список процессов из командной строки с помощью утилиты tasklist, и вывести их в текстовое поле на форме, созданной с помощью сервера Windows Script Host.

В предыдущей статье “Утилиты tasklist и taskkill” была затронут такая неприятность – некоторые утилиты командной строки при выводе данных в файл не реагируют на смену кдиовки, и поэтому приходится создавать bat файл. Тут ситуация такая же: с помощью компонентаWindowSystemObject мы создадим форму, на которой будет находится текстовое поле (в него будет выводиться список процессов через утилиту командной строки) и две кнопки (для обновления данных и открытия временного файла).

VBScript: Получение списка процессов через командную строки

' ***********************************************************' Получение списка процессов средствами командной строки' process-list-cmd.vbs' *********************************************************** OptionExplicit dim WSO, WshShell, FSOdim f, t, edit, button_analize, button_cleare, button_opendim data_file, temp_file, bat_data, cur_dir '*************************************************************************'            создаем ссылки на объектыset WSO = Wscript.CreateObject("Scripting.WindowSystemObject")set WshShell = Wscript.CreateObject("Wscript.Shell")set FSO = Wscript.CreateObject("Scripting.FileSystemObject")'************************************************************************* '*************************************************************************'            параметры формыset f = WSO.CreateForm(0,0,0,0)f.ClientWidth = 560f.ClientHeight = 300f.CenterControl()f.Text = "Список процессов из командной строки"f.SizeGrip = falsef.MaximizeBox = false'************************************************************************* ' путь к временному файлуtemp_file = WshShell.ExpandEnvironmentStrings("%TEMP%") & "" & FSO.GetTempName' текущий каталогcur_dir = WshShell.CurrentDirectory '*************************************************************************'        содержимое батникаbat_data = "@echo off" & vbCrLfbat_data = bat_data & "chcp 866 >nul" & vbCrLfbat_data = bat_data & "tasklist >test.txt" & vbCrLfbat_data = bat_data & "for /f " & chr(34) & "tokens=*" & chr(34) & " %%a in (test.txt) do call :convert %%a" & vbCrLfbat_data = bat_data & "goto :eof" & vbCrLf bat_data = bat_data & ":convert" & vbCrLfbat_data = bat_data & "chcp 1251 >nul" & vbCrLfbat_data = bat_data & "echo %*>>" & chr(34) & temp_file & chr(34) & vbCrLfbat_data = bat_data & "chcp 866 >nul"'************************************************************************* 'Поле для вывода данныхset edit = f.CreateEdit(0,0,400,300,WSO.Translate("ES_MULTILINE"))edit.ScrollBars = WSO.Translate("SS_BOTH")edit.ReadOnly = trueedit.WordWrap = true ' кнопка получения данныхset button_analize = f.CreateButton(430,10,100,25,"Анализировать")button_analize.OnClick = getref("Analize"' кнопка очистки данныхset button_cleare = f.CreateButton(430,40,100,25,"Очистить")button_cleare.OnClick = getref("Cleare"'кнопка открытия файла с даннымиset button_open = f.CreateButton(430,70,100,25,"Открыть")button_open.OnClick = getref("Open"set t = f.CreateHyperLink(420,100,250,25,"www.scriptcoding.ru") f.Show()WSO.Run() '*************************************************************************'                        функции управления function Cleare()     edit.Text=""     data_file=""endfunction 'Отправка запросаfunction Analize()dim get_file_data     create_bat(bat_data)     set get_file_data=FSO.OpenTextFile(temp_file, 1, false)     data_file = get_file_data.ReadAll     get_file_data.Close     edit.Text = data_fileendfunction functionOpen()     WshShell.Run "wordpad.exe " & temp_fileendfunction function create_bat(data)dim t_file     set t_file=FSO.CreateTextFile("info.bat", true)     t_file.WriteLine(data)     t_file.Close ()     WshShell.Run "cmd.exe /c " & chr(34) & cur_dir & "info.bat" & chr(34),1,trueendfunction'*************************************************************************

Давайте сразу определимся с функциями, которые используются как в данном сценарии, так и в следующем:

Cleare() – отвечает за очистку переменной с данными и текстового поля, вызывается нажатием на кнопку “Очистить

Analize() – отвечает за формирование списка, для вызова функции нужно нажать на кнопку “Анализировать”. В теле функции сначала происходит вызов функции create_bat(), далее идет процесс открытия временного файла (читай, “Объект FileSystemObject метод OpenTextFile”), считывание из него данных и заполнение ими текстового поля

Open() – тут всего одна строчка, которая отвечает за открытие временного файла с помощью программы wordpad.exe

create_bat(data) – данной функции передается один параметр, который содержит строки будущего bat файла. В теле функции происходит процесс создания файла в текущем каталоге (смотри “Объект FileSystemObject метод CreateTextFile”) и его запуск.

JScript: Получение списка процессов через командную строки

// ***********************************************************// Получение списка процессов средствами командной строки// process-list-cmd.js// *********************************************************** var f, t, edit, button_analize, button_cleare, button_open;var data_file, temp_file, bat_data, cur_dir; //*************************************************************************//            создаем ссылки на объектыvar WSO = WScript.CreateObject("Scripting.WindowSystemObject");var WshShell = WScript.CreateObject("Wscript.Shell");var FSO = WScript.CreateObject("Scripting.FileSystemObject");//************************************************************************* //*************************************************************************//            параметры формыf = WSO.CreateForm(0,0,0,0);f.ClientWidth=560;f.ClientHeight=300;f.CenterControl();f.Text="Список процессов из командной строки";f.SizeGrip=false;f.MaximizeBox=false;//************************************************************************* // путь к временному файлуtemp_file = WshShell.ExpandEnvironmentStrings("%TEMP%")+"\"+ FSO.GetTempName();// текущий каталогcur_dir = WshShell.CurrentDirectory; //*************************************************************************//        содержимое батникаbat_data ="@echo offn";bat_data +="chcp 866 >nuln";bat_data +="tasklist >test.txtn";bat_data +="for /f "+"""+"tokens=*"+"""+" %%a in (test.txt) do call :convert %%an";bat_data +="goto :eofn"; bat_data +=":convertn";bat_data +="chcp 1251 >nuln";bat_data +="echo %*>>"+"""+ temp_file +"""+"n";bat_data +="chcp 866 >nul";//************************************************************************* //Поле для вывода данныхedit = f.CreateEdit(0,0,400,300,WSO.Translate("ES_MULTILINE"));edit.ScrollBars= WSO.Translate("SS_BOTH");edit.ReadOnly=true;edit.WordWrap=true; // кнопка получения данныхbutton_analize = f.CreateButton(430,10,100,25,"Анализировать");button_analize.OnClick= Analize; // кнопка очистки данныхbutton_cleare = f.CreateButton(430,40,100,25,"Очистить");button_cleare.OnClick= Cleare; //кнопка открытия файла с даннымиbutton_open = f.CreateButton(430,70,100,25,"Открыть");button_open.OnClick= Open; t = f.CreateHyperLink(420,100,250,25,"www.scriptcoding.ru"); f.Show();WSO.Run(); //*************************************************************************//                        функции управления function Cleare(){     edit.Text="";     data_file="";} //Отправка запросаfunction Analize(){var get_file_data;     create_bat(bat_data);     get_file_data=FSO.OpenTextFile(temp_file,1,false);     data_file = get_file_data.ReadAll();     get_file_data.Close();     edit.Text= data_file;} function Open(){     WshShell.Run("wordpad.exe "+ temp_file);} function create_bat(data){var t_file     t_file=FSO.CreateTextFile("info.bat",true);     t_file.WriteLine(data);     t_file.Close();     WshShell.Run("cmd.exe /c "+"""+ cur_dir +"\info.bat"+""",1,true);}//*************************************************************************

Стоит обратить внимание на один не маловажный момент, для вставки двойных кавычек, в vbscript мы использовали функцию chr со значением 34, а в jscript – esc последовательность “ «”.

Скачать архив с примерами

Данные примеры получения списка процессов через командную строку содержат один изъян: при запуске bat файла происходит конвертация кодировки, что требует затрат времени, поэтому, после нажатия на кнопку Анализировать, придется немного подождать.

Оцените статью
Технологии программирования и ведение блога
Добавить комментарий