none
获取不到温度数据的问题 RRS feed

  • 问题

  • 我使用了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 修改
    2011年8月26日 7:04

答案

  • 1.检查searcher.Get()是否有对象返回。

    2.如果没有说明读取不到你机器的温度数据,建议你找个软件看看是否能显示你机器温度,比如“鲁大师”。如果也不能读取,说明是机器问题,建议换机器测试代码~~~


    family as water
    • 已标记为答案 JSHZP 2011年8月29日 7:02
    2011年8月26日 13:09

全部回复

  • 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/
    2011年8月26日 7:17
    版主
  • 1.检查searcher.Get()是否有对象返回。

    2.如果没有说明读取不到你机器的温度数据,建议你找个软件看看是否能显示你机器温度,比如“鲁大师”。如果也不能读取,说明是机器问题,建议换机器测试代码~~~


    family as water
    • 已标记为答案 JSHZP 2011年8月29日 7:02
    2011年8月26日 13:09
  • 机器不支持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


    2018年2月7日 8:56