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

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

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

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

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

' ***********************************************************
' Получение списка процессов средствами командной строки
' process-list-cmd.vbs
' ***********************************************************
 
Option Explicit
 
dim WSO, WshShell, FSO
dim f, t, edit, button_analize, button_cleare, button_open
dim 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 = 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 off" & vbCrLf
bat_data = bat_data & "chcp 866 >nul" & vbCrLf
bat_data = bat_data & "tasklist >test.txt" & vbCrLf
bat_data = bat_data & "for /f " & chr(34) & "tokens=*" & chr(34) & " %%a in (test.txt) do call :convert %%a" & vbCrLf
bat_data = bat_data & "goto :eof" & vbCrLf
 
bat_data = bat_data & ":convert" & vbCrLf
bat_data = bat_data & "chcp 1251 >nul" & vbCrLf
bat_data = bat_data & "echo %*>>" & chr(34) & temp_file & chr(34) & vbCrLf
bat_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 = true
edit.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,"scriptcoding.ru")
 
f.Show()
WSO.Run()
 
'*************************************************************************
'                        функции управления
 
function Cleare()
     edit.Text=""
     data_file=""
end function
 
'Отправка запроса
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_file
end function
 
function Open()
     WshShell.Run "wordpad.exe " & temp_file
end function
 
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,true
end function
'*************************************************************************

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

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 off\n";
bat_data += "chcp 866 >nul\n";
bat_data += "tasklist >test.txt\n";
bat_data += "for /f " + "\"" + "tokens=*" + "\"" + " %%a in (test.txt) do call :convert %%a\n";
bat_data += "goto :eof\n";
 
bat_data += ":convert\n";
bat_data += "chcp 1251 >nul\n";
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,"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 файла происходит конвертация кодировки, что требует затрат времени, поэтому, после нажатия на кнопку Анализировать, придется немного подождать.

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