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

Считаю, что проблема классификации множества классов еще не решена. Но в первом приближении все-таки удалось разбить классы на категории, которые упрощают поиск класса (если вы знаете его имя), или просмотр всего множества (если вы просто хотите его оценить). Следующий метод определяет позицию класса в дереве treeClasses с учетом указанных требований классификации.

void AddClass(string name, ManagementClass c)

{

TreeNode node = treeClasses.Nodes[0];

if (c.Derivation.Contains("__Event"))

{

Globals.FindOrAddNode("Event-Generating", ref node);

MyEvents.Classify(name, ref node);

}

else

{

if (TestForProperties(c, ref node))

MyProperties.Classify(name, ref node);

else

{

Globals.FindOrAddNode("Other", ref node);

MyOther.Classify(name, ref node);

}

}

node.Nodes.Add(name, name, 3, 2);

}

bool TestForProperties(ManagementClass c, ref TreeNode node)

{

foreach (QualifierData qd in c.Qualifiers)

{

if (qd.Name.Equals("dynamic") || qd.Name.Equals("static"))

{

Globals.FindOrAddNode("Properties Owners", ref node);

return true;

}

}

return false;

}

void ClearLists()

{

curClass = null;

nClasses = nMethods = nProps = nQualifiers = 0;

lblNumMethods.Text = lblNumProp.Text = "Select a class...";

lblDescr.Text = "Select a property, method or qualifier...";

listProp.Items.Clear();

listMethods.Items.Clear();

listQualifiers.Items.Clear();

tDescrClasses.Text = tDescr.Text = "";

btnGetValues.Visible = false;

}

Для решения проблемы наведения порядка в множестве классов понадобились три вспомогательных класса.

¨  Класс MyProperties помогает разобраться с классами, имеющими свойства.

¨  Класс MyEvents помогает разобраться с классами, имеющими события.

¨  Класс MyOther производит разбор остальных классов.

using System.Windows.Forms;

using System;

namespace Library

{

public static class MyProperties

{

static string[] letters = {

"A", "B", "C", "D", "E", "F", "G", "H", "I", "K", "L", "M", "N", "O", "P",

"Q", "R", "S", "T", "U", "V", "W", "X", "__" };

static string[] prefixes = {

"Ac", "Al", "Am", "AspNet", "As", "broker", "bu", "Ca", "Ce", "Ch", "CIM",

"Cl", "Co", "Cr", "Csc", "Ctl", "cursor",

"database", "De", "Disk", "Driver", "En", "Er", "Ex",

"Fa", "Fd", "Fi", "Fr", "He", "Ho", "Http", "HWConfig", "Im", "Io", "Is", "Kerb",

"latch", "Lo", "Lp","Ma", "MMC", "Me", "Mo", "MSNdis", "Mp", "MSi", "MSS", "MSW",

"MSF", "MSN", "MS1", "MSP", "MST", "MSK", "MS_", "MS", "Mu", "Ne", "Nl", "No", "Nt",

"Open", "Op", "Page", "Pl", "Po", "Process", "Prop", "Rd", "RS", "Registry", "Re",

"Sam", "Sc", "Set", "Se", "Si", "So", "Sq", "Sp", "St", "Sy",

"Tc", "Te", "Th", "TP", "Ts", "Ud", "Um",

"Web", "Wc", "Wd", "Wl", "Wm", "Win32_Perf", "Win32_A", "Win32_B", "Win32_C", "Win32_D",