这是我在Form1构造函数中调用方法的代码:
private void cpuFanSpeed()
{
SelectQuery query =
new SelectQuery("Win32_Fan");
// Instantiate an object searcher
// with this query
ManagementObjectSearcher searcher =
new ManagementObjectSearcher(query);
// Call Get() to retrieve the collection
// of objects and loop through it
foreach (ManagementObject envVar in searcher.Get())
MessageBox.Show(envVar["DesiredSpeed"].ToString());
}
但它永远不会到达MessageBox。 这有什么不对?我尝试阅读并通过此处的文档进行操作:http://msdn.microsoft.com/en-us/library/aa394146(v=vs.85).aspx
在这里:http://msdn.microsoft.com/en-us/library/ms257359.aspx
但它不起作用。
我想在标签上每秒显示我的CPU风扇速度。
这是OpenHardwareMonitor的屏幕截图显示我的cpu风扇速度:
这是我在我的应用程序中用来获取CPU温度的函数代码:
课堂上:
public static float? cpuView(bool pause , CpuTemperature cpuTemp , Form1 f1 , List<string> myData , float? myCpuTemp , Button b1)
{
if (pause == true)
{
}
else
{
Computer myComputer = new Computer();
myComputer = new Computer(cpuTemp)
{
CPUEnabled =
true
};
myComputer.Open();
Trace.WriteLine("");
foreach (var hardwareItem in myComputer.Hardware)
{
if (hardwareItem.HardwareType == HardwareType.CPU)
{
hardwareItem.Update();
foreach (IHardware subHardware in hardwareItem.SubHardware)
subHardware.Update();
foreach (var sensor in hardwareItem.Sensors)
{
cpuTemp.SetValue("sensor", sensor.Value.ToString());
if (sensor.SensorType == SensorType.Temperature)
{
sensor.Hardware.Update();
cpuTemp.GetValue("sensor", sensor.Value.ToString());
f1.Invoke(new Action(() => myData.Add("Cpu Temeprature --- " + sensor.Value.ToString())));
myCpuTemp = sensor.Value;
if (sensor.Value > 60)
{
Logger.Write("The Current CPU Temperature Is ===> " + sensor.Value);
b1.Enabled = true;
}
break;
}
}
}
}
}
return myCpuTemp;
}
答案 0 :(得分:4)
并非每台机器都通过WMI提供此信息。如果您的计算机没有,您将无法访问它。仅仅因为WMI提供了访问特定信息的属性并不意味着信息始终可用。
据推测,您在foreach
循环中迭代的集合为空,这就是为什么没有MessageBox
显示的原因。
解决此问题的唯一可能方法是从主板制造商处获取更新的驱动程序,为WMI提供此信息(当然,假设您的硬件甚至包括在第一次测量此类事物所需的传感器位)。
编辑:Open Hardware Monitor显然已经编写了自己的驱动程序,可以直接与您的硬件进行交互,查询其传感器。通过浏览他们的网页documents specific pieces of hardware that it supports确认了这种怀疑。
它没有使用WMI来获取其信息,因此这并不能证明您自己可以从WMI获取信息。
但是,上面链接页面的底部确实包含了这个有趣的评论:
Open Hardware Monitor将所有传感器数据发布到WMI(Windows Management Instrumentation)。这允许其他应用程序也读取和使用传感器信息。可以找到界面的初步文档here。
因此,您似乎可以在开放硬件监视器上搭载,使用其驱动程序检索信息,然后从应用程序内部检索信息。这可能是最好的解决方案,因为我怀疑你的硬件制造商是否会通过更新的驱动程序来为WMI提供风扇速度。