Windows Management Instrumentation. Опрос свойств, методов и описателей. Разработка компонента WMIControl, страница 6

Console.WriteLine (mo["Name"]);

Результатом этого запроса будет не все множество дисковых накопителей, а подмножество, в которое попадут лишь те диски, размер которых более 40 Гб. Используя подобную технику, мы можем получать интересующую нас информацию о любом множестве объектов вычислительной системы.

С помощью свойств и методов класса ManagementEventWatcher мы можем не только получать информацию о системе, но и управлять ею, реагируя на интересующие нас события.

Разработка компонента WMIControl

Мы собираемся создать решение, состоящее из нескольких проектов. Проект типа WindowsFormsControlLibrary (это — DLL), позволит управлять параметрами системы, оперируя объектами классов из пространства имен System.Management. Параллельно, мы разработаем проект типа Windows Application (это — EXE), который будет пользоваться возможностями классов, экспортируемых DLL и предоставит пользователю удобный интерфейс для осуществления мониторинга и управления системой. Здесь нам придется разобраться в некоторых технологических деталях взаимодействия с элементами управления формы: TreeView, ListView и др.

Приложение будет иметь вид, показанный на рис. 2. Расщепленная форма главного окна содержит TabControl, вкладки (TabPages) которого отображают вложенные элементы управления: WMIControl, FileSystemControl, SysInfoControl, ServicesControl и ProcessesControl. Перечисленные элементы — это классы, которые вам предстоит разработать и поместить в проект типа WindowsFormsControlLibrary (DLL). Создайте общий каркас всего решения (solution), для этого:

¨  В меню File4New выберите командуProject. В окне диалога New Project, в окне Project Type раскройте узел дерева под именем Visual C#. В окне Templates выберите стартовый шаблон вида: Windows Forms Application.

¨  Установите флаг Create directory for solution. В окне Solution Name введите имя решения MyWMI.

¨  В окне Name введите имя проекта Client. В окне Location задайте местоположение новой папки с файлами решения (solution). Напоминаю, что при работе в классе вы должны пользоваться папкой D:\Users (иначе гарантированно будут проблемы). Нажмите OK.

Рис.2. Вид первой вкладки главного окна приложения.

Рис.3. Вид второй вкладки главного окна приложения.

Добавьте в рабочее пространство (solution) еще один проект типа WindowsFormsControlLibrary.

¨  В контекстном меню текущего решения MyWMI (будьте внимательны: решения, а не проекта) выберите команду Add4New Project.

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

¨  Заметьте, что активным является первый проект (Client). С помощью меню правой кнопки и команды Set as SturtUp Project это можно изменить и сделать активным другой проект.

Думаю, что в решение следует добавить еще один проект консольного типа, назвать его TestWMI и отработать с его помощью приемы работы с классами WMI. Для этого советую использовать фрагменты кода, приведенные ранее в этом документе. Если вы это уже проделали в рамках другого проекта, то советую принести тот проект в папку нашего решения и подключить к нему. Вспомогательный учебный проект TestWMI позволяет проверять созревающие идеи, опробовать фрагменты кода и т. д.

Разработка элемента управления WMIControl

Вид этого элемента управления приведен на рис. 4. В левой панели расщепленного окна будет отображено дерево пространств имен, в следующей панели — дерево классов WMI, размещенных в выбранном пространстве имен, справа вы видите три списка (свойств, методов и описателей выбранного класса). Справа внизу вы видите текстовые поля, в которых будут отображены описания, точнее, значения свойств Description для выбранного класса и выбранного элемента в одном из трех списков. Компонент WMIControl носит вспомогательную роль. Его можно использовать, как справочную систему по классам WMI. С его помощью вы сможете найти все свойства, методы и описатели классов. Более того, вы можете определить, имеются ли объекты (ManagementObject) определенного класса в вашей системе в данный момент. Если да, то вы сможете узнать значение выбранного вами свойства для все объектов выбранного класса. Этот вывод будет произведен в отдельную форму со списком типа ListView.