VBScript: Остановка процесса из командной строки

VBScript: Остановка процесса из командной строки Примеры скриптов и макросов для Word и WSH

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

Я решил не повторять ошибку, допущенную в статье “Создаем менеджер служб”, там я впихнул сразу два огромных сценариях, и, фактически получилась сплошная каша на 12 тысяч символов. Просто я хотел сэкономить время, в результате – позиции в выдаче были хуже, чем я ожидал.

Как и прежде, для создания оконного интерфейса мы будем использовать компонент WindowSystemObject, ссылку на архив с примером вы найдете в конце статьи. Задача примера – получить список процессов, выделить нужный и (закрыть) остановить процесс из командной строки, для этого мы будем использовать утилиту taskkill.

'**************************************************************************' Закрытие процесса из командной строки' process-killer.vbs'**************************************************************************OptionExplicit ' Формируем ссылки на объектdim WSO, WshShell, objWMIService set WSO = WScript.CreateObject("Scripting.WindowSystemObject")set WshShell = WScript.CreateObject("WScript.Shell")set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\.rootcimv2"dim list_view_obj, data_array(), t, f, def_columnsdim Button_Update, Button_Killdim Caption_class, GetOwner_class, ProcessId_class, ParentProcessId_class '*************************************************'            пользовательские классы'*************************************************Class new_class     Dim  Caption, GetOwner, ProcessId, ParentProcessIdEnd Class Class C_class     PropertyGet name                 name = "Описание"     EndProperty     PropertyGet width                 width = 100     EndProperty      function set_data(item, iy)                 item.Text = data_array(iy).Caption       endfunctionEnd Class Class UN_class    PropertyGet name                 name = "Имя пользователя"     EndProperty     PropertyGet width                 width = 120     EndProperty      function set_data(item, iy)                 item.SubItems(0) = data_array(iy).GetOwner     endfunctionEnd Class Class Pid_class     PropertyGet name                 name = "PID процесса"     EndProperty     PropertyGet width                 width = 80     EndProperty      function set_data(item, iy)                 item.SubItems(1) = data_array(iy).ProcessId     endfunctionEnd Class Class PidP_class     PropertyGet name                 name = "PID родителя"     EndProperty     PropertyGet width                 width = 80     EndProperty      function set_data(item, iy)                 item.SubItems(2) = data_array(iy).ParentProcessId     endfunctionEnd Class'*************************************************** ' ************************* Параметры формы ************************************************set f = WSO.CreateForm(0, 0, 0, 0, WSO.Translate("WS_CONTROLBOX | WS_MINIMIZEBOX"))f.Text = "Остановка процесса через командную строку"f.ClientWidth = 560f.ClientHeight = 300f.CenterControl()'*********************************************************************************************** '********************************************************************************'                  Управляющие кнопкиset Button_Update = f.CreateButton(420,10,100,25,"Обновить список")Button_Update.OnClick = getref("ProcessUpdate"set t = f.CreateHyperLink(410,40,250,25,"www.scriptcoding.ru"' Закрыть процесс через командную строкуset Button_Kill = f.CreateButton(420,70,100,25,"Остановить")Button_Kill.OnClick = getref("ProcessKill"' функция для формирования массива с даннымиfunction fill_data_array()dim colItems, objItem, inc, my_class, len_col, outputdim strUser, strDomain, Domain_User     Redim data_array(0)    inc = 0     ' формируем коллекцию     set colItems = objWMIService.ExecQuery("Select * from Win32_Process")     len_col = colItems.count     Redim data_array(len_col)      ' произвдим перебор коллекции     ForEach objItem in colItems     set my_class = new new_class                 output = objItem.GetOwner(strUser,strDomain)                 ifoutput = 0 then                            Domain_User = strDomain & "" & strUser                 else                            Domain_User="Нет Доступа"                 endif                 with my_class                            .Caption = objItem.Caption                            .GetOwner = Domain_User                            .ProcessId = objItem.ProcessId                            .ParentProcessId = objItem.ParentProcessId                 endwith                  set data_array(inc) = my_class                 inc = inc +1     Nextendfunction '***************************************************************'                      массив с даннымиset Caption_class = new C_classset GetOwner_class = new UN_classset ProcessId_class = new Pid_classset ParentProcessId_class = new PidP_classdef_columns = Array(Caption_class, GetOwner_class, ProcessId_class, ParentProcessId_class) ' Формируем панель со спискомfunction CreateListView()dim def_col, column, ix, iy      'Создаем объект ListView     set list_view_obj = f.CreateListView( 0, 0, 400, 300,WSO.Translate("LVS_REPORT | LVS_SHOWSELALWAYS"))    'Свойства объекта ListView     list_view_obj.GridLines = true     list_view_obj.RowSelect = true     list_view_obj.ReadOnly = false     ' Определяем имя и тип колонок     for ix = 0 toUBound(def_columns)                 set column = list_view_obj.Columns.Add(def_columns(ix).name, def_columns(ix).width)     next     ' Заполняем список     fill_data_array()     list_view_obj.Count = UBound(data_array)     for ix = 0 toUBound(def_columns)                 for iy=0 to list_view_obj.Count-1                            def_columns(ix).set_data list_view_obj.item(iy), iy                 next     nextendfunction 'вызываем функцию для формирования спискаCreateListView() f.Show()WSO.Run() '************************************************************************'               управляющие функцииfunction ProcessUpdate()dim ix, iy     list_view_obj.Clear()     ' Заполняем список     fill_data_array()     list_view_obj.Count = UBound(data_array)     for ix = 0 toUBound(def_columns)                 for iy=0 to list_view_obj.Count-1                            def_columns(ix).set_data list_view_obj.item(iy), iy                 next     nextendfunction ' Остановить процесс из командной строкиfunction ProcessKill(sender)dim cur_process_pid     if list_view_obj.ItemIndex<0 then

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