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

¨  Добавьте, наконец, код реакции на вставку и удаление диска в CD/DVD ROM.

void watchCD_EventArrived(object sender, EventArrivedEventArgs e)

{

try

{

ManagementBaseObject was = e.NewEvent["PreviousInstance"] as ManagementBaseObject;

ManagementBaseObject now = e.NewEvent["TargetInstance"] as ManagementBaseObject;

// При вставке диска обработчик вызывается несколько раз.

// При вставке диска значение now["FileSystem"] == "UDF"

// При удалении диска значение was["FileSystem"] == "UDF"

object

pFS = was["FileSystem"],

nFS = now["FileSystem"];

string name;

if (pFS == null && nFS != null)

{

name = was["Name"].ToString();

Invoke(new Action<string>(SetMessage), "New disk was loaded " + name);

Invoke(new Action<string, string>(OnAddDisk), "5", name);

}

else if (pFS != null && nFS == null)

{

name = was["Name"].ToString();

Invoke(new Action<string>(SetMessage), "New disk was removed " + name);

Invoke(new Action<string, string>(OnRemoveDisk), "5", name );

}

}

catch (Exception ex) { new FormMsg(null, "Win32_VolumeChangeEvent: "+ex.Message,3000); }

}

При манипуляциях с CD/DVD ROM-устройством этот метод вызывается несколько раз и только один из этих вызовов содержит необходимую нам информацию. Алгоритм определения типа события (вставка диска или его удаление) основан на сравнении файловой системы (FAT, NTFS, UDF) двух экземпляров объекта ManagementBaseObject. Один из них соответствует старому значению (PreviousInstance), другой новому (TargetInstance). При отсутствии диска в приводе старое значение файловой системы равно null.

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

Приступим к разработке второго компонента библиотеки Library, который должен с помощью класса WMI получить общую информацию о системе и показать ее в окне, связанном со страницей tabSysInfo блока страниц TabControl. Общий вид компонента показан на рисунке ниже.

¨  В Solution Explorer выделите проект Library и в его контекстном меню выберите команду Add4Add New Item.

¨  В диалоге Add New Item выберите тип User Control, задайте имя SysInfoControl.cs и нажмите кнопку Add.

¨  Переведите файл в режим дизайна и задайте размеры его окна равными примерно 700; 480.

¨  В Toolbox найдите ImageList и положите на форму. Задайте ему имя (свойство Name) treeImages.

¨  Добавьте TreeView и задайте ему свойства: Name=tree, Dock=Left, Size=600;480, ImageList = treeImages.

¨  Добавьте кнопку (Button). Свойства: Name = bRefresh, Text = Refresh, FlatStyle = Flat, Location = 621; 28.

¨  Добавьте GroupBox. Свойства: Name = boxComputer, Text = Computer, Location = 613; 64, Size = 92; 80.

¨  Внутрь GroupBox положите два элемента RadioButton. Cвойства: Name = rdCurrent и rdRemote, Text = Current и Remote, Checked = True и False, TabStop = True и False, Location = 12; 20 и 12; 44.

¨  Добавьте GroupBox, Name = boxAdmin, Text = Select, Location = 613; 159, Size = 108; 154, Visible = False.

¨  Внутрь группы boxAdmin положите 3 элемента типа Label. Cвойства: Name = label1, label2 и label3, Text = IP or Machine Name:, UserID: и Password:, AutoSize = True, Location = 11; 23, 11; 62 и 11; 101.

¨  Туда же добавьте три элемента TextBox. Name = textName, textUserID и textPass, Text = пусто Location = 11; 39, 11; 78 и 11; 117 Size = 84; 20.

¨  Введите обработку события. Выделите rdRemote, нажмите кнопку Events, найдите событие CheckedChanged и совершите по этой строке двойной щелчок.

¨  Совершите двойной щелчок по кнопке bRefresh для того, чтобы студия ввела обработчик ее нажатия.

¨  В окне Solution Explorer выделите узел Library и в его контекстном меню выберите команду Build.