2010-04-27 5 views
2

Это, вероятно, не самый лучший способ, но я в настоящее время извлечения объем оперативной памяти на компьютере с помощью:Использование ManagementObject для извлечения одного свойства WMI

manageObjSearch.Query = new ObjectQuery("SELECT TotalVisibleMemorySize FROM Win32_OperatingSystem"); 
manageObjCol = manageObjSearch.Get(); 

foreach (ManagementObject mo in manageObjCol) 
sizeInKilobytes = Convert.ToInt64(mo["TotalVisibleMemorySize"]);

Он работает хорошо, но я чувствую, Я мог бы делать это более непосредственно и без Еогеасп над одним элементом, но я не могу понять, как индексировать ManagementObjectCollection

Я хочу сделать что-то вроде этого:

ManagementObject mo = new ManagementObject("Win32_OperatingSystem.TotalVisibleMemorySize") 
mo.Get(); 

Console.WriteLine(mo["TotalVisibleMemorySize"].ToString())

или, может быть, даже что-то вроде

ManagementClass mc = new ManagementClass("Win32_OperatingSystem"); 
Console.WriteLine(mc.GetPropertyValue("TotalVisibleMemorySize").ToString());

Я просто не могу понять это. Есть идеи?

ответ

3

Оператор foreach скрывает перечислитель, к которому вам нужно получить доступ. Вы можете сделать это прямо так:

 var enu = manageObjSearch.Get().GetEnumerator(); 
     if (!enu.MoveNext()) throw new Exception("Unexpected WMI query failure"); 
     long sizeInKilobytes = Convert.ToInt64(enu.Current["TotalVisibleMemorySize"]); 
+0

Спасибо за помощь, Ханс. – KarlHungus

+0

Кроме того, начиная с Vista, Win32_OPeratingSystem является одноэлементным классом, поэтому вы можете избежать использования ManagementObjectSearcher. См. Здесь: http://stackoverflow.com/questions/56208/wmi-directly-accessing-the-singleton-instance-of-win32-operatingsystem/73054#73054 – 2010-04-28 20:14:46

Смежные вопросы