读书人

怎么使用VB6.0读取BIOS中CPU的核心温度

发布时间: 2012-03-14 12:01:13 作者: rapoo

如何使用VB6.0读取BIOS中CPU的核心温度
总所周知,个人计算机会在CPU温度过高时自动断电保护,要实现这一功能首先就是要是取得CPU的核心温度。在主板的BIOS中有一项可以查看CPU核心的温度。我想通过VB6.0编写程序读取它。我尝试过网上提供的一些方法,比如:

VB code
Public Function GetCPUTemp() As Double          Dim i     As Integer          Dim mCPU     As Variant          Dim u     As Variant          Dim s     As String                      Set mCPU = GetObject("WINMGMTS:{impersonationLevel=impersonate}!root\wmi").ExecQuery("SELECT   CurrentTemperature   From   MSAcpi_ThermalZoneTemperature")          For Each u In mCPU                  s = s & u.CurrentTemperature          Next                      Set mCPU = Nothing                      GetCPUTemp = (s - 2732) / 10            End Function

这是网上比较多出现的代码,能读出温度值,但是是一个恒定不变的(AMD的CPU是40.0℃),这其实是一个错误的值。有高手说,要读取正确的值需要主板支持,但为什么像“Z武器”这样的工具却能在任何一台电脑上实现CPU温度的读取呢?

我想实现真正的能正确读取CPU温度值的功能!请高手不吝赐教!小弟倒地拜谢先!!


[解决办法]
没试过,帮顶
[解决办法]
Private Sub Timer1_Timer()
Debug.Print GetCPUTemp

End Sub
你的程序放入定时器,在我机子上温度的确有变化,不过属于跨度比较大才有变化值的一种。
不能实时串跟踪的缓慢变化。


[解决办法]
不懂,帮顶。。。
[解决办法]
BIOS是各个厂商写的。所以直接读BIOS是不可取的。即使写好了一个可以读BIOS的程序,但是可能只对某品牌的BIOS好用。

所以最好把VB当成BIOS。

纯属胡说
[解决办法]
http://support.microsoft.com/default.aspx?scid=306852
[解决办法]
探讨
引用:
Private Sub Timer1_Timer()
  Debug.Print GetCPUTemp

End Sub
你的程序放入定时器,在我机子上温度的确有变化,不过属于跨度比较大才有变化值的一种。
不能实时串跟踪的缓慢变化。

这个我试过了,在Intel的CPU下,读出是恒定的23.6℃,AMD是40.0℃。呵呵!
这个值和像Z武器的完全不一样。

[解决办法]
因为我的本子(联想的)散热不好,所以在省电模式你的程序的值大约是64,然后转到最加模式,要不了两分钟,这个值到了80,没有中间数值变化,所以我说跨度比较大,而不是不变化。
[解决办法]
探讨
兄弟,我是一边开着Z武器(47℃)一边开着自己写的代码(恒定40℃),我开始杀毒,Z武器温度到了54℃,而自己写的还是40℃ 

可以肯定的说,我写出来的这个代码得到的结果是错误的,因为它恒定是40℃。

[解决办法]
没用过,帮顶
[解决办法]
好像说这段代码在一些笔记本上可以用,台式机一般都不起作用。
[解决办法]
To Veron_04
好好看看吧,你的Z武器大概是这样子做出来的.....

http://topic.csdn.net/t/20030306/17/1499897.html
http://topic.csdn.net/t/20040627/13/3126026.html

[解决办法]
cpu温度可以在pmu里读到,端口是68h、6ch,你需要一个pmu的说明,看明白了很简单的。

以上是我给你转的帖子中的,应该说PMU才是关键。。。。。

[解决办法]
探讨
唉!汇编的呢!猴哥,这哪是人看的东西哦!神仙才能看嘛。

[解决办法]
进来顶一下,等解决了,记得留一份完整的代码
[解决办法]
我也在期待处理结果..........
[解决办法]
记录一下,非要我再看一遍汇编不成?
------解决方案--------------------


路过 帮顶
[解决办法]
关注
帮顶!
[解决办法]
找了半天也没有解决的办法,各位高手们努力。期待结果的出现.楼主的代码试过,加上timer还是恒温。
[解决办法]
这个东东不好说
[解决办法]
这个代码确实有问题,一直恒温。
[解决办法]
能力有限,只能帮顶!
[解决办法]
关注中……
[解决办法]
学习,顶起~~~
[解决办法]
MARK
[解决办法]
我发现“鲁大师”有这功能,谁下载个进行逆向下?
[解决办法]

探讨
鲁大师是有,但就是不知是如何实现的。唉!

[解决办法]
探讨
楼上的开玩笑嗦??~~

[解决办法]
你的代码我通不过,你们都是怎么通过的?
[解决办法]
可以去别的软件站下一个现成的试一下,我以前见过类似的!
[解决办法]
CPUID指令
1. CPUID指令代码: 0a20f
例:

CPUID MACRO
dw 0a20fh
ENDM

2. CPUID有效检测
如果程序可以改变EFLAGE(扩展标志字)的第21位,那么CPUID有效,
否则无效。
注:对于Cyrix的CPU,在打开其内部CPUID标志位之前,用此方法检测
无效。
例:

...
pushfd
pop eax
mov ecx,eax
xor eax,200000h ;强制扩展标志位第21位为1
push eax
popfd
pushfd
pop eax
xor eax,ecx ;如果扩展标志位的第21位为1,那么
je no_cpuid ;CPUID存在,否则不存在
jmp have_cpuid
...

3. CPUID指令
(1)基本指令
1.第0号功能: (EAX=0)
调用寄存器:
EAX=0
返回寄存器:
EAX=最大功能号
EBX:EDX:ECX=CPU厂商识别串
例:

...
xor eax,eax
CPUID
cmp ebx,"Genu"
jne no_intel
cmp edx,"ineI"
jne no_intel
cmp ecx,"ntel"
jne no_intel
jmp is_intel
...

合并ebx,edc,ecx寄存器的值,如果为GenuineIntel,就是Intel的CPU

另:
AuthenticAMD => AMD
CyrixInstead => Cyrix,被VIA兼并了
NexGenDriven => NextGen
RiseRiseRise => Rise
UMC UMC UMC => UMC
CentaurHauls => IDT

2.第1号功能: (EAX=1)
调用寄存器
EAX=1
返回寄存器
EAX=CPU说明
CPU说明(见附录1)

bit 内容
0--3 节率 (stepping)


4--7 型号 (model)
8--11 家族 (family)

EDX=特征标志字

bit 内容 缩写
0 FPU On-chip FPU
1 Virtual Mode Extension VME
2 Debugging Extension DE
3 Page Size Extension PSE
4 Time Stamp Counter TSC
5 RDMSR/WRMSR Instructions
6 Physical Address Extension PAE
7 Machine Check Exception MCE
8 CMPXCHG8B Instruction
9 On-chip APIC HardWare
10 Undefined
11 SYSENTER/SYSEXIT Instructions
12 Memory Type Range Registers
13 Page Global Enable PGE
14 Machine Check Architecture MCA
15 Conditional Move Instruction CMI
16 Page Attribute Table PAT
17--22 Undefined
23 MMX Instructions MMX
24 internet Streaming SIMD Extensions SSE
25--31 Undefined


(2)扩展指令
1.第80000000号功能(EAX=80000000h)
调用寄存器:
EAX=80000000h
返回寄存器:
EBX,ECX,EDX=保留
EAX=最大功能号

2.第80000001号功能
调用寄存器:
EAX=80000001h
返回寄存器:
EAX=CPU说明(见第1号功能)
EDX=扩展特征标志字

EDX[0] <- FPU: FPU on Chip
EDX[1] <- VME: Virtual Mode Extention present
EDX[2] <- DE: Debbuging Extentions
EDX[3] <- PSE: CPU support 4MB size pages
EDX[4] <- TSC: TSC present (See RDTSC command)
EDX[5] <- MSR: CPU have K5 Compatible MSRs
EDX[6] <- 0 (Reserved)
EDX[7] <- MCE: Machine Check exception
EDX[8] <- CX8: Support CMPXCHG8B instruction
EDX[9] <- Reserved
EDX[10]<- Support SYSCALL and SYSRET instruction (!!!)
EDX[11,12]<- reserved
EDX[13]<- PGE: Page Global Feature support
EDX[14]<- reserved
EDX[15]<- CMOV: CPU support CMOV instruction
EDX[16]<- FCMOV: CPU support FP. FCMOV (!!!)
EDX[22..16] <- Reserved
EDX[23] <- MMX: CPU support IA MMX
EDX[24] <- (Cyrix) Cyrix Extended MMX


EDX[30..24] <- Reserved
EDX[31] <- AMD 3DNow!

1. Cyrix
厂商识别串: "CyrixInstead"
CPU名称 家族 型号
MediaGX 4 4
6x86 5 2 (特征标志字=0x1)
6x86L 5 2 (特征标志字=0x105)
GXm 5 4
6x86MX 6 0

2. NexGen
厂商识别串: "NexGenDriven"
CPU名称 家族 型号
Nx586 5

3. UMC
厂商识别串: "UMC UMC UMC "
CPU名称 家族 型号
U5D 4 1
U5S 4 2

4. AMD
厂商识别串: "AuthenticAMD"
CPU名称 家族 型号
486DX2WT 4 3
486DX2WB 4 7
486DX4WT 4 8
486DX4WB 4 9
5x86WT 4 0x0e
5x86WB 4 0x0f
486 4 Others
K5/SS 5 0
K5 5 1,2,3
K6 5 6,7
K6-2 5 8
K6-III 5 9
K5/K6 5 Others
K7工程样本 6 0
K7 6 Others

5. IDT
厂商识别串: "CentaurHauls"
CPU名称 家族 型号
WinChip C6 5 4
WinChip 2 5 8

6 Rise
厂商识别串: "RiseRiseRise"
CPU名称 家族 型号
mP6 5 0

读书人网 >VB

热点推荐