使用ManagementObject检索单个WMI属性

时间:2010-04-27 20:42:18

标签: c# winapi wmi

这可能不是最好的方法,但我目前正在使用以下方法检索机器上的RAM量:

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());

我似乎无法弄明白。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

foreach语句隐藏了您需要访问的枚举器。你可以直接这样做:

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