catch (Exception e) { MessageBox.Show(e.Message); }
}
//====== Конец блока, который должен повторяться для каждого класса WMI
// Продолжайте в том же духе
}
Повторяйте блок команд, но изменяйте суть запросов (классы WMI). Приведем примерный перечень: Win32_Processor, Win32_LogicalMemoryConfiguration, Win32_LogicalDisk, Win32_VideoController, Win32_OperatingSystem, Win32_TimeZone, Win32_Bios, Win32_NetworkConnection. Не забывайте изменять индексы иконок, которые вы должны вставить в ImageList, соответствующий нашему дереву. В заключение приведу вспомогательную функцию, которая может понадобиться для повышения читабельности.
string KiloToMegaBytes (object o)
{
return string.Format ("{0:f1} Mb", Int64.Parse(o.ToString()) / 1024.0);
}
Мне захотелось создать такую функцию, чтобы многократно не повторять одни и те же преобразования. Кроме того, я использовал выражения вида:
string size = string.Format ("{0:f1} Mb",
(int.Parse (mo["TotalPhysicalMemory"].ToString())) / (1024.0 * 1024.0));
При решении задачи напрашивается обобщающий прием вида:
foreach (PropertyData data in mo.Properties)
nodes.Add (new TreeNode (data.Name + ": " + mo[data.Name], 2, 3));
и он очень полезен с познавательной точки зрения (обязательно исследуйте его), но с практической точки зрения он создает массу ненужных строк, забивающих эфир (jamming the air).
using System;
using System.Collections;
using System.Management;
using System.Windows.Forms;
namespace Library
{
public partial class ProcessControl : UserControl
{
#region Data
string sMachine;
ConnectionOptions co;
ProcessListComparer listComparer;
ManagementEventWatcher watcherCreate, watcherDelete;
bool removing;
public event Action<string> UpdateLog;
#endregion
#region Init
public ProcessControl()
{
InitializeComponent();
Load += new EventHandler(ProcessesControl_Load);
watcherCreate = new ManagementEventWatcher(
@"Select * from __InstanceCreationEvent within 1
where TargetInstance ISA 'Win32_Process'");
watcherDelete = new ManagementEventWatcher(
@"Select * from __InstanceDeletionEvent within 1
where TargetInstance ISA 'Win32_Process'");
}
void ProcessesControl_Load(object sender, EventArgs e)
{
GetSysInfo();
SetProcessList();
FillProcesses();
ShowProperty(// Ваш код);
combo.Items.AddRange(new object[] {
"hh.exe", "notepad.exe", "regedit.exe", "calc.exe", "mmc.exe"});
watcherCreate.EventArrived += // Ваш код
watcherDelete.EventArrived += // Ваш код
Disposed += // Ваш код
combo.SelectedIndexChanged += // Ваш код
listView.ItemChecked += // Ваш код
listView.ColumnClick += // Ваш код
listView.ItemSelectionChanged += // Ваш код
btnRefresh.Click += // Ваш код
rbCurrent.CheckedChanged += // Ваш код
watcherCreate.Start();
watcherDelete.Start();
}
#endregion
#region Methods
void AddItem(ListViewItem item)
{
listView.BeginUpdate();
listView.ItemCheck -= // Ваш код
item.Checked = true;
listView.Items.Add(item);
OnUpdateLog(// Ваш код);
listView.ItemCheck += // Ваш код
listView.EndUpdate();
}
void RemoveList(string id)
{
foreach (// Элемента списка listView)
{
if (// Если PID == id)
{
OnUpdateLog("Process " + item.SubItems[1].Text + " num : "
+ item.SubItems[2].Text + " terminated");
item.Remove();
break;
}
}
}
void StopProcess(int id)
{
ManagementObjectSearcher searcher = // Ваш код
if (searcher.Get().Count != 0)
{
foreach (ManagementObject mo in searcher.Get())
mo.InvokeMethod("Terminate", null);
}
}
void ShowProperty(string s)
{
string q = "Select * from Win32_Process where ProcessId = " + s;
ManagementObjectSearcher searcher = new ManagementObjectSearcher(q);
foreach (ManagementObject mo in searcher.Get())
prop.SelectedObject = new Processes(mo);
}
void SetProcessList()
{
listView.Columns.Add("№ ", 50, HorizontalAlignment.Left);
listView.Columns.Add("Process", 120, HorizontalAlignment.Left);
listView.Columns.Add("ID", 80, HorizontalAlignment.Left);
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.