Windows Management Instrumentation. События в WMI. Библиотека классов MyWMI. Особенности работы с большим деревом, страница 4

Кроме наблюдателя, пример демонстрирует такую архитектурную деталь как приемник событий. Приемником называется объект системы, которому отводится роль подписчика на события, или элемента реагирующего на события. В приемнике (классе Receiver) размещено задание делегата (функция ArrivedHandler).

class Test

{

static void Main()

{

  ManagementClass mc = new ManagementClass (@"Win32_Process");

  foreach (ManagementObject proc in mc.GetInstances())

    Console.WriteLine (proc["Caption"].ToString());

ManagementEventWatcher watcher = new ManagementEventWatcher (new WqlEventQuery(

    "Select * from __InstanceCreationEvent within 1 " +

    @"where TargetInstance ISA 'Win32_Process'"));

Receiver r = new Receiver();

watcher.EventArrived += new EventArrivedEventHandler (r.ArrivedHandler);

watcher.Start();    // Start watching for events

System.Threading.Thread.Sleep (180000); // wait for 3 minutes

watcher.Stop();

Console.WriteLine ("Done watching for events");

}

}

public class Receiver

{

public void ArrivedHandler (object sender, EventArrivedEventArgs e)

{

  Console.WriteLine ("Process started = " +

    ((ManagementBaseObject)e.NewEvent["TargetInstance"])["Caption"]);

}

}

Запустив это приложение, воспользуйтесь клавишной комбинацией LWin+R. Клавиша LWin — "Левая Windows" расположена слева внизу (с изображением Windows Logo). В диалоге Run (он появится в результате нажатия комбинации) запустите несколько процессов, пути к которым прописаны в переменных окружения системы, например: cmd, notepad, mmc, regedit и т.д. При этом в окне нашего приложения (в конце списка процессов, запущенных системой) будут появляться новые строки. Например:

System Idle Process

System

devenv.exe

// . . . , и т.д.

Process started  = mmc.exe

Process started  = regedit.exe

Process started  = WinRAR.exe

Done watching for events

Через 3 минуты наблюдатель выключится (см. вызов метода Stop) и приложение завершится, но в течение этих трех минут наблюдатель оповещает нас обо всех процессах, которые стартовали в системе.

Библиотека классов MyWMI

В этом разделе мы разработаем проект типа Class Library, который позволит производить мониторинг системы и управлять ее параметрами с помощью классов из пространства имен System.Management. Параллельно, мы разработаем Windows-приложение, которое будет пользоваться возможностями классов нашей библиотеки и предоставит пользователю удобный интерфейс для осуществления мониторинга и управления системой. Приложение будет иметь примерно такой вид:

Создайте общий какркас всего решения (solution), для этого:

1.  В меню File4New выберите команду Blank solution.

2.  В появившемся окне диалога New Project, в окне Project Type раскройте узел дерева под именем Visual Studio Solution. В окне Templates выбор единственный — Blank solution.

3.  В окне Name введите имя решения MyWMI.

4.  В окне Location задайте местоположение новой папки с файлами решения (solution) и нажмите OK.

Вставьте в пустое рабочее пространство (solution) два проекта (Class Library и Windows Application):

6.  В контекстном меню текущего решения выберите команду Add4New Project.

7.  В окне диалога выберите тип проекта Visual C# Projects4Class Library, задайте имя Library и убедитесь, что папка проекта попадает внутрь папки решения.

8.  Сразу добавьте в решение второй проект. Для этого в контекстном меню текущего решения (будьте внимательны: решения, а не проекта) выберите команду Add4New Project.

9.  В окне диалога выберите тип проекта Windows Application, задайте имя Client и убедитесь, что папка проекта попадет внутрь папки решения.

10.  Заметьте, что активным является первый проект (Library). Если это не так, то с помощью меню правой кнопки добейтесь, чтобы это было так, дав команду: Set as SturtUp Project.