新手求助,C#怎么获取硬件的温度。在网上也查找到了很多资料,可是小弟编程水平很低,不提供完整代码根本不知道怎么弄,只能做可耻的伸手党了。
已下载http://download.csdn.net/download/hetao19890614/3977558上面的程序,程序能够正常运行,可是不能得到CPU温度,个人认为可能是硬件bios的原因。不知道有没有高手能够提供其他程序,用C++编写的也可。
在此,先谢过大家了

解决方案 »

  1.   

    http://blog.163.com/dragon_ml/blog/static/112000278201012722642452/1. 通过读WMI的方式,这种方式主要是读MSAcpi_ThermalZoneTemperature,但是这个值不同的资料却有不同的说法,有的说是CPU温度,有的说是主板温度,而且试验了一下,这个值在我机器上一直是40,所以认为不准。但有网友说这个值需要通过ACPI的方式,不断的强制刷新让WMI去获取。但是ACPI一点都不会
    2. DTS方式。这个是当前觉的最靠谱的方法。具体见几个收藏链接。这种方式的重要地方在于怎么样获取Ring0权限。这样才能读取MSR。
       在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.)3. 在pmu里读到,端口是68h、6ch。这个方法如果写驱动或许可以试试,但是用WinIO没有实现综上,获取这个值需要访问CPU底层,所以写驱动获取Ring0权限是必要的。
      

  2.   

    昨天换了个电脑,用现在的程序可以得到温度,看来还是与bios版本有关
      

  3.   

    http://download.csdn.net/download/hetao19890614/3977558 帖子里已经给地址了