积极答复者
获取不到温度数据的问题

问题
-
我使用了WMI获取机器的温度数据,代码如下
try { ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select * From Win32_TemperatureProbe"); foreach (ManagementObject share in searcher.Get()) { foreach (PropertyData PC in share.Properties)//执行不到这句话 { //some codes ... } } } catch { }
通过调试发现,执行不到注释的那条语句。应该是searcher.Get()返回为空。什么原因呢?
我使用的xp系统,硬件是普通的兼容机。是否我的机器没有配置所需的温度传感器,就不支持获取温度数据。是这个原因还是别的?
- 已编辑 JSHZP 2011年8月26日 7:05 修改
答案
全部回复
-
strComputer = "." Set colTempProbe = GetObject("Winmgmts:"_ & "{impersonationLevel=impersonate}!\\"_ & strComputer & "\root\cimv2")._ InstancesOf("Win32_TemperatureProbe") Num = 0 For Each obj In colTempProbe WScript.Echo obj.Name & VBNewLine _ & obj.DeviceID & VBNewLine _ & obj.Status & VBNewLine _ & obj.Resolution & VBNewLine _ & obj.Tolerance & VBNewLine _ & obj.Accuracy Num = Num +1 Next If Num = 0 Then WScript.Echo "No temperature probe data" End If
http://msdn.microsoft.com/en-us/library/Aa394493
http://feiyun0112.cnblogs.com/ -
机器不支持WMI,所以就没有返回值。。 你可以用openhardwaremonitor来获取温度,这是另一种方法。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using OpenHardwareMonitor.Hardware; namespace Get_CPU_Temp5 { class Program { public class UpdateVisitor : IVisitor { public void VisitComputer(IComputer computer) { computer.Traverse(this); } public void VisitHardware(IHardware hardware) { hardware.Update(); foreach (IHardware subHardware in hardware.SubHardware) subHardware.Accept(this); } public void VisitSensor(ISensor sensor) { } public void VisitParameter(IParameter parameter) { } } static void GetSystemInfo() { UpdateVisitor updateVisitor = new UpdateVisitor(); Computer computer = new Computer(); computer.Open(); computer.CPUEnabled = true; computer.Accept(updateVisitor); for (int i = 0; i < computer.Hardware.Length; i++) { if (computer.Hardware[i].HardwareType == HardwareType.CPU) { for (int j = 0; j < computer.Hardware[i].Sensors.Length; j++) { if (computer.Hardware[i].Sensors[j].SensorType == SensorType.Temperature) Console.WriteLine(computer.Hardware[i].Sensors[j].Name + ":" + computer.Hardware[i].Sensors[j].Value.ToString() + "\r"); } } } computer.Close(); } static void Main(string[] args) { while (true) { GetSystemInfo(); } } } }
你可以试试,运行的时候需要有管理员权限。
详细的图文教程在这:http://bit.ly/openhardwaremonitorgetcputemp