У даній статті ми спробуємо закрити заданий процес з командного рядка через діалогове форму, створену за допомогою сервера сценаріїв Windows Script Host мовою vbscript.
Я вирішив не повторювати помилку, допущену в статті "Створюємо менеджер служб", там я пхнув відразу два величезних сценаріях, і, фактично вийшла суцільна каша на 12 тисяч символів. Просто я хотів заощадити час, в результаті - позиції у видачі були гірше, ніж я очікував.
Як і раніше, для створення віконного інтерфейсу ми будемо використовувати компонент WindowSystemObject. посилання на архів з прикладом ви знайдете в кінці статті. Завдання прикладу - отримати список процесів, виділити потрібний і (закрити) зупинити процес з командного рядка, для цього ми будемо використовувати утиліту taskkill.
Перше на що варто звернути увагу - це призначені для користувача класи, їх всього п'ять:
new_class - клас містить чотири властивості (по числу колонок в списку), в кожному властивості зберігається задана інформація про процес (Ними (Опис), Обліковий дані, під якими працює процес, ідентифікатор і ідентифікатор батька).
Решта чотири класи зберігають ім'я колонки, її ширину і функція, яка відповідає за додавання даних в список для поточної колонки
На формі знаходяться дві кнопки:
Button_Update - викликає функції для оновлення списку, це необхідно, якщо ми хочемо перевірити, чи не змінився склад працюючих процесів, після того, як ми зупинили процес з командного рядка.
Button_Kill - потрібна, що б зупинити заданий процес з командного рядка. При натисканні буде викликатися функція ProcessKill.
Зверніть увагу, що б викликати потрібну функцію, ми використовуємо функцію vbscript GetRef, і в якості параметра передаємо їй ім'я функції, але не цілком, а у вигляді рядка. Це особливості самої мови vbscript. Фактично, GetRef формують посилання на копію заданої функції.
Далі йде формування масиву data_array в функції fill_data_array. Тут ми отримуємо доступ до класу Win32_Process. який повертає колекцію процесів і витягаємо чотири властивості. Сам масив data_array зберігає в собі об'єкти із заданими властивості, число об'єктів рівно числу елементів в списку.
Для заповнення колонок ми звертаємося до масиву def_columns, який теж зберігає в собі об'єкти.
Функція CreateListView відповідає за створення списку, формування колонок і додавання елементів.
Сам компонент WindowSystemObject містить досить широкі можливості, але ... слабку довідку щодо застосування і опису. Так, я поки не розібрався, як коректно провести сортування елементів, що б було зручніше зупинити процес з командного рядка. Так як при сортуванні даних змінюється їх індекси, і відповідно, має змінитися вміст самого масиву data_array.