能力值:
( LV5,RANK:70 )
|
-
-
2 楼
不知,**!
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
第一个途径是通用接口,与具体硬件配置无关的。Everest极有可能使用这类接口。
第二个途径是硬件厂商保留的底层接口,这些可能并不公开,只用在与硬件配套发行的utilities上。
LZ感兴趣的应该是第一类接口。微软提供了一整套与系统硬件相关的类。通过这些类可以监控冷却系统、主板传感器、电源等硬件。我自己没有写过读取这类信息的程序,只能提供一些线索。LZ可以试着自己写一下。
温度传感器的类是Win32_TemperatureProbe,参考文档见MSDN - Computer System Hardware Classes这一节。地址:http://msdn.microsoft.com/en-us/library/aa389273(v=VS.85).aspx
class Win32_TemperatureProbe : CIM_TemperatureSensor
{
……
sint32 CurrentReading; //注意这个成员是保留的,现在并不能使用。我不太清楚如果它不能用,还能从哪里读取当前的温度信息。
……
};
如果上述参考信息还不足以解决所有问题,LZ可以试试搜索SMBIOS(System Management BIOS)方面的信息,那些传感器的数据都是通过SMBIOS返回的。
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
向3楼认真学习一下ai
|
能力值:
( LV6,RANK:90 )
|
-
-
5 楼
呵~
我原来也郁闷 别人是怎么获取这些信息的
谢谢三楼
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
.net有个类结构managementObject
可以通过WMI读取一部分的硬件信息
http://msdn.microsoft.com/zh-cn/library/system.management.managementobjectsearcher(v=vs.80).aspx
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
估计要写驱动或者从芯片厂商那里获得接口
|
能力值:
( LV4,RANK:50 )
|
-
-
8 楼
比较高级的接口,一般都是WMI,如三楼说所的那样。楼主可以MSDN WMI中相关的类。
|
能力值:
( LV4,RANK:50 )
|
-
-
9 楼
前段时间刚做过这个,俺也是看别人的帖子写的,利用的是一个WinRing0.sys驱动通过Intel的指令取得的温度
新的酷瑞CPU和AMD的CPU 内部都集成有温度传感器DTS (Digital Thermal Sensor),每个核心有一个,以前的移动CPU好像也支持温度探测,但手头没有这样的CPU没法做测试.AMD 的温度值保存在 NB 寄存器中,酷瑞CPU 的 DTS 值保存在 MSR 0x19c 中,可以通过 rdmsr 来读取
这里只说酷睿CPU的读取过程
Intel 定义 eax=6 执行 cpuid, 然后测试 eax 第一位是否为1,如果为1表示CPU支持DTS ,当然之前应该以 eax=0 执行 cpuid 检测 eax 支持的最大命令数,如果小于6就肯定不支持DTS。
读取DTS:1 以 ecx=0xee 执行 rdmsr 指令, 测试 eax 的第30位是否为 1, 如果为 1 表示温度计算的初始值为 85 度否则表示从100度开始计算,这个值称为 Tjunction. 然后以 ecx=0x19c 执行 rdmsr 指令, eax 的 16:23 位为表示当前DTS 值,这个值并不代表当前温度,而要以下面公式计算.
当前cpu温度 = Tjunction - DTS
注意 signature 为 0x6f1, 0x6f0的 CPU DTS 值直接代表当前温度而不用Tjunction 相减. 而 signature 小于等于 0x6f4 的 Tjunction 一直为100, 如果你是双核的cpu 可以使用 SetProcessAffinityMask API 来指定执行的CPU,以检测这个核心的温度。呵呵,我就不用啦,本本是单核的
另 rdmsr 指令需要运行在 0 级的代码才能执行.所以写一个简单的驱动也是必须的.
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
请问LS的方法在Win7平台上能否使用?Ring0的应该属于KMDF了吧?
|
|
|