【已解决】C#获取CPU温度支持Win10(OpenHardwareMonitor)
2016-12-09 15:51
1496 查看
本方法Win10 64bit 亲身测试可用,温度可以实时更新!!
很久前在Win8实现过远程CPU温度监控,用的是WMI方法,感觉简单易用。
现在换上了Win10,发现获取到的温度一直不会变,于是找到了http://blog.csdn.net/yanpingsoft/article/details/8754679 提到了OpenHardwareMonitor,于是就尝试了一下,但发现了一个问题:只有先运行现成的OpenHardwareMonitor.exe,我的C#程序才能读到温度值,否则为null。情况跟http://bbs.csdn.net/topics/391007951?page=1的一样。
搞了许久,没头绪,于是打算更新下OpenHardwareMonitor的库。于是网上百度“OpenHardwareMonitor”,找到最新的0.8.0beta的版本,下载替换了OpenHardwareMonitorLib.dll。试了下发现不能兼容,所以稍微改下代码,增加一句:computer.CPUEnabled = true;就完事了。完整的使用代码如下:
1、添加引用OpenHardwareMonitorLib.dll,添加using OpenHardwareMonitor.Hardware;
2、增加一个类
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) { }
}
3、具体实现代码:
private void button1_Click(object sender, EventArgs e)//某个按键触发
{
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++)
{
//循环找到HardwareType为cpu
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)
{
if (computer.Hardware[i].Sensors[j].Name == "CPU Package") //我只获取整个package的温度,需要其他core的温度就改这里
Console.WriteLine("Tem=" + computer.Hardware[i].Sensors[j].Value.ToString());
}
}
}
}
computer.Close();
}
很久前在Win8实现过远程CPU温度监控,用的是WMI方法,感觉简单易用。
现在换上了Win10,发现获取到的温度一直不会变,于是找到了http://blog.csdn.net/yanpingsoft/article/details/8754679 提到了OpenHardwareMonitor,于是就尝试了一下,但发现了一个问题:只有先运行现成的OpenHardwareMonitor.exe,我的C#程序才能读到温度值,否则为null。情况跟http://bbs.csdn.net/topics/391007951?page=1的一样。
搞了许久,没头绪,于是打算更新下OpenHardwareMonitor的库。于是网上百度“OpenHardwareMonitor”,找到最新的0.8.0beta的版本,下载替换了OpenHardwareMonitorLib.dll。试了下发现不能兼容,所以稍微改下代码,增加一句:computer.CPUEnabled = true;就完事了。完整的使用代码如下:
1、添加引用OpenHardwareMonitorLib.dll,添加using OpenHardwareMonitor.Hardware;
2、增加一个类
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) { }
}
3、具体实现代码:
private void button1_Click(object sender, EventArgs e)//某个按键触发
{
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++)
{
//循环找到HardwareType为cpu
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)
{
if (computer.Hardware[i].Sensors[j].Name == "CPU Package") //我只获取整个package的温度,需要其他core的温度就改这里
Console.WriteLine("Tem=" + computer.Hardware[i].Sensors[j].Value.ToString());
}
}
}
}
computer.Close();
}
相关文章推荐
- 【已解决】C#获取CPU温度支持Win10(OpenHardwareMonitor)
- c# 获取CPU温度(非WMI,直接读取硬件)
- C# 获取CPU温度
- 无法升级win10检测提示CPU温度过高怎么办?解决方法
- C# 获取并判断操作系统版本,解决Win10、 Windows Server 2012 R2 读取失败的方案
- C# 获取CPU 温度 的两种方式
- 转载:c# 获取CPU温度(非WMI,直接读取硬件)
- C#获取CPU温度(OpenHardwareMonitorLib.dll库)
- Win10中CPU占用率高温度高程序很卡的四种解决办法
- Windows 7 C# OCX 无法获取“****”控件的窗口句柄,不支持无窗口的ActiveX控件的解决办法
- win10_x64更新错误解决: 安装一些更新时出现问题,但我们稍后会重试。如果持续出现这些问题,并且你想要搜索Web或联系支持人员以获取相关信息,以下信息可能会对你有帮助:
- C#获取硬盘编号、CPU编号及类型、内存大小及使用情况
- C#中获取CPU序列号、网卡Mac地址、IP地址、硬盘序列号、登录用户名、PC类型、计算机名称、物理内存
- C#获取cpu序列号,硬盘ID,网卡MAC地址
- c#“对于不返回任何基表信息的 SelectCommand 不支持动态 SQL 生成”错误的解决
- 用C#获取CPU编号、硬盘编号等系统有关环境、属性
- 用C#获取CPU编号、硬盘编号等系统有关环境、属性
- C# 中获取CPU序列号/网卡mac地址
- C# 写的 CPU 浮点运算测试工具.并且还有获取CPU种种数据的方法(图)(代码)
- c#中获取cpu序列号、网卡mac地址、ip地址、硬盘序列号、登录用户名、pc类型、计算机名称、物理内存