c#如何获取硬件的温度
发布网友
发布时间:2022-04-21 00:17
我来回答
共5个回答
热心网友
时间:2023-10-07 04:20
1、通过读WMI的方式
这种方式主要是读MSAcpi_ThermalZoneTemperature,但是这个值不同的资料却有不同的说法,有的说是CPU温度,有的说是主板温度,而且试验了一下,这个值在我机器上一直是40,所以认为不准。
2、 DTS方式
这个是当前觉的最靠谱的方法。具体见几个收藏链接。这种方式的重要地方在于怎么样获取Ring0权限。这样才能读取MSR。
3、在XP中用ZwSystemDebugControl试验了一下,一些机器上可以正确取得。
不过合理的方式还是写驱动获取Ring0权限。CPU-Z虽然看不到驱动文件,但是还是使用的写驱动的方式(Reading an MSR does require you to have a ring0 access. Both Core Temp and RealTemp use a driver for this.
The driver Core Temp uses is hidden in the executable for portability, so that's why you don't see anything other than the EXE when you download it.)
4、在pmu里读到,端口是68h、6ch。这个方法如果写驱动或许可以试试,但是用WinIO没有实现.
综上,获取这个值需要访问CPU底层,所以写驱动获取Ring0权限是必要的。
热心网友
时间:2023-10-07 04:20
using System.Management;
Double CPUtprt = 0;
System.Management.ManagementObjectSearcher mos = new System.Management.ManagementObjectSearcher(@"root\WMI", "Select * From MSAcpi_ThermalZoneTemperature");
foreach (System.Management.ManagementObject mo in mos.Get())
{
CPUtprt = Convert.ToDouble(Convert.ToDouble(mo.GetPropertyValue("CurrentTemperature").ToString()) - 2732) / 10;
lbl1.Text = ("CPU 温度 : " + CPUtprt.ToString() + " °C");
}
不是实时的,经测试大约3-5分钟硬件更新一次.
热心网友
时间:2023-10-07 04:21
你想要什么? API在自己调到
调用OpenProcess方法名称:调用OpenProcess位置:Kernel32.dll中
调用OpenProcess函数打开一个现有的进程对象,并返回一个句柄的进程。
HANDLE调用OpenProcess(
DWORD dwDesiredAccess,//访问标志
BOOL bInheritHandle,//句柄继承选项
DWORD dwProcessId //进程标识符
);
返回值:如果成功,返回指定进程句柄值。
这样的失败,返回值为NULL,调用GetLastError获取错误代码
热心网友
时间:2023-10-07 04:21
鲁大师或者驱动人生等硬件管理的都带有温度检测
热心网友
时间:2023-10-07 04:22
使用SNMP协议追问能否具体说说啊
追答SNMP协议是一个标准协议,可以查看本机CUP温度,也可以查看网络其他设备的CPU温度,不管是windows还是linux系统。本机windows系统只要在安装iis那里吧snmp打开就可以。C#中用的有snmpsharpnet来管理snmp的get,set,wolk和trap。trap就是使用很广泛的主动推送告警。