2014-12-04 92 views
2

我正在尝试使用OpenHardwareMonitorLib DLL来获取我的CPU \ cores的温度,但是这并没有为我返回温度。使用开放式硬件监控器获取CPU温度

我环顾四周,看到这是一个几乎无处不在的问题,但我无法得到它的工作。

如果有人能告诉我我在哪里出错,我会非常感激。

这是我的代码:

using System; 
using System.Linq; 
using System.Management; 
using OpenHardwareMonitor.Collections; 
using OpenHardwareMonitor.Hardware; 
using OxyPlot; 
using OxyPlot.Series; 


namespace cs_TempReader 
{ 
    class Program 
    { 
     private DateTime now; 
     protected readonly ListSet<ISensor> active = new ListSet<ISensor>(); 
     public event SensorEventHandler SensorAdded; 
     public event SensorEventHandler SensorRemoved; 

     protected virtual void ActivateSensor(ISensor sensor) 
     { 
      if (active.Add(sensor)) 
       if (SensorAdded != null) 
        SensorAdded(sensor); 
     } 

     private static void Main(string[] args) 
     { 
      var myComputer = new Computer(); 

      myComputer.CPUEnabled = true; 
      myComputer.ToCode(); 
      myComputer.Open(); 

      foreach (var hardwareItem in myComputer.Hardware) 
      { 
       hardwareItem.Update(); 
       hardwareItem.GetReport(); 

       Console.WriteLine(hardwareItem.GetReport()); 

       var series = new LineSeries(); 

       foreach (var sensor in hardwareItem.Sensors) 
       { 
        if (sensor.SensorType == SensorType.Temperature) 
        { 
         Console.WriteLine("{0} {1} {2} = {3}", sensor.Name, sensor.Hardware, sensor.SensorType, sensor.Value); 

        } 

       } 
      } 
     } 
    } 
} 

我的最终目标是能够绑定到一个更大的应用程序这一点。

+1

OHM应用程序能正常工作吗? – leppie 2014-12-04 14:35:32

+0

通过一些其他OpenHardwareMonitor标记的问题,我碰到[最近OpenHardwareMonitor示例代码C#](http://stackoverflow.com/questions/11765192/recent-openhardwaremonitor-sample-code-c-sharp?rq=1)其中一个答案表明,由于API调用的性质,您需要以管理员权限运行VS。 – AWinkle 2014-12-04 14:47:11

+0

@Simon:编辑器是正确的,可以从问题中删除您的签名,因为您的用户名自动显示在SO本身问题的右下角。 – 2014-12-04 14:48:17

回答

2

您需要在应用程序中请求更高的执行级别,以便此代码可以正常工作。

要做到这一点,你必须:

  • 右键单击该项目;
  • 点击添加
  • 点击新项...
  • 类型清单的搜索栏上
  • 点击确定

之后,你必须在清单上更改此行:

<requestedExecutionLevel level="asInvoker" uiAccess="false" /> 

要这样:

<requestedExecutionLevel level="highestAvailable" uiAccess="false" /> 
0

可能是你必须迫使你的应用程序以管理员身份运行,那么你的代码可能会工作。

右键单击Project> Add New Item,选择“Application Manifest File”。

更改

<requestedExecutionLevel> 

元素:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 

这里的教程,你可以去看看。

http://www.lattepanda.com/topic-f11t3004.html