获取CPU的温度的方法

合集下载

查看CPU温度电脑知识

查看CPU温度电脑知识

查看CPU温度电脑知识
查看CPU温度电脑知识
现在可谓是家家户户都有电脑了,那么,电脑的基本操作您都了解清楚了吗?下面就让小编带你去看看查看CPU温度电脑知识吧,希望能帮助到大家!
夏天来了,使用电脑的朋友都知道,炎夏电脑很容易发热。

而电脑CPU发热不仅严重影响工作,也会对电脑带来致命的伤害。

下面,我们就来看看CPU降温消暑小技巧。

一、查看CPU温度
1、Bios里查看CPU温度。

每块主板都有温度传感器,它时刻记录着CPU和主板的温度,在电脑开机自检时,CPU的温度和风扇的转速就会显示出来,我们可以按DEL键进入Bios查看PC Health信息,CPU温度一目了然。

2、软件查看CPU温度。

查看CPU温度的软件很多,例如鲁大师。

二、CPU温度过高原因
1、CPU风扇散热不行。

CPU风扇与CPU接触不完全,CPU风扇转速过低,风扇质量不过关,这都是造成CPU温度过高的`原因。

2、系统使用CPU占用率100%。

系统垃圾过多,开启进程或程序过多,中毒,这些情况都能导致CPU占用100%,从而使得CPU满载运作,温度过高。

3、CPU超频。

CPU频率高了,自然发热量就大了,而普通的CPU风扇应付不来,导致CPU高温不下。

三、CPU温度过高解决办法
1、检查CPU风扇是否正确安装,在Bios里将风扇转速设为100%。

具体操作因主板不同而不同,请参见主板说明书。

2、优化系统,查杀病毒,关闭不必要的启动项,升级内存。

3、超频的话应该换一个质量好点的风扇,有能力的可以购置水冷系统,如果对电脑性能要求不是太高的话,推荐恢复CPU默认频率。

cpu温度如何查看

cpu温度如何查看

cpu温度如何查看有时候想要查看cpu温度!该怎么样去查看呢?下面由店铺给你做出详细的cpu温度查看方法介绍!希望对你有帮助!cpu温度查看方法一开机按F2进入BIOS(不同品牌进入BIOS有所不同)-【Hardware Monitor】或【PC Health】-【CPU temperature】即CPU的温度!不同品牌进BIOS不同的bios有不同的进入方法,通常会在开机画面有提示。

按bios品牌:Award bios:按“Del”键,AMI bios:按“Del”或“esc”键,Phoenix bios:按“F2”键其它牌品进入bios设置方法:ibm(冷开机按f1,部分新型号可以在重新启动时启动按f1)hp(启动和重新启动时按f2)sony(启动和重新启动时按f2)dell(启动和重新启动时按f2)acer(启动和重新启动时按f2)toshiba(冷开机时按esc然后按f1)hp compaq(开机到右上角出现闪动光标时按f10,或者开机时按f10)fujitsu(启动和重新启动时按f2)绝大多数国产和台湾品牌(启动和重新启动时按f2)联想(启动和重新启动时按f2/f10/f1)cpu温度查看方法二1、驱动没有经过认证,造成CPU资源占用100%。

大量的测试版的驱动在网上泛滥,造成了难以发现的故障原因。

2、杀毒软件CPU使用率占用100%现在的杀毒软件一般都加入了,对网页、邮件、个人隐私的即时监空功能,这样无疑会加大系统的负担。

比如:在玩游戏的时候,会非常缓慢。

关闭该杀毒软件是解决得最直接办法3、病毒、木马造成。

出现CPU占用率100% 的故障经常是因为病毒木马造成的,比如震荡波病毒。

应该首先更新病毒库,对电脑进行全机扫描。

接着,再使用反间谍软件,检查是否存在间谍软件。

论坛上有不少朋友都遇到过svchost.exe占用CPU100%,这个往往是中毒的表现。

svchost.exe Windows中的系统服务是以动态链接库(DLL)的形式实现的,其中一些会把可执行程序指向svchost.exe,由它调用相应服务的动态链接库并加上相应参数来启动服务。

通过读取MSR值获取CPU温度经验总结

通过读取MSR值获取CPU温度经验总结

通过读取MSR值获取CPU温度经验总结Intel对CPU温度的处理,设置了一个最高温度Tjunction, 从MSR 中读取的数据为与最高温度的温差Delta’,并非实际温度,实际温度为Tjunction-Delta,Tjunction根据不同的CPU有不同的值。

DTS( Digital Thermal Senser)方式,通过读取MSR来实现,这个是当前觉的最靠谱的方法,重要地方在于怎么样获取Ring0权限。

而且比较有名气的Core Temp就是用这种方法来实现的,其中Core Temp已加入Linux 工具集。

现在Intel处理器CPU中每个都集合了DTS,用来实时监测CPU 的温度,当温度达到TCC( Thermal Control Circuit)激活温度时,将会通过降低电压、主频、风扇调节等形式调节温度,我们称这个温度为Tjunction而我们从MSR(Model Specific Register)读到的温度是距离Tjunction的温差,而不是实际的温度,称之为Delta’所以实际的温度为:Tjunction- Delta’并且不同CPU的Tjunction还不一样,可以为85℃、100℃、105℃等。

根据Intel用户手册.在Intel Core i3 3240(通用机)的Tjunction是直接通过0x1A2来读取MSR的[16-22]位来得到,我得到的数据和Core Temp得到的数据一样105℃;.而Intel Atom CPU D525是通过0xee来读取MSR的30位,如果是0,Tjunction为100℃,反之为85℃,我读到的数据为100℃,而Core Temp 读到的为125℃,我不知道它具体是怎么实现的。

1.程序结构与结果分析>以eax=1执行CPUID指令, 将得到CPU Signature通用机EMM运行结果0x000306A9 0x000106CA.根据[[Extended Family: Family]:[Extended: Model]],分别得到0x063A,0x061C,得到3rd Generation Intel Core Processor and Intel Xeon Processor和Intel Atome Processor family [64-ia-32-architectures-software-developer-manual-325462.pdf] P654.Figure 3-5. Version Information Returned by CPUID in EAX[64-ia-32-architectures-software-developer-manual-325462.pdf] P3090.Table 35-1. CPUID Signature Values of DisplayFamily_DisplayModel>以eax=0执行CPUID指令得到支持的最大指令数通用机EMM运行结果0xD 0xA>以eax=6执行CPUID指令,其中第0位为0表示支持DTS通用机EMM运行结果0x75 0x1>0xee来读取MSR的30位,如果是0,Tjunction为100℃,反之为85℃,此处通用机数据无效通用机EMM运行结果无效0x2390001>通过0x1A2来读取MSR的[16-22]位来直接得到Tjunction,此处EMM数据无效通用机EMM运行结果0x00691400 无效>通过0x19C来读取MSR的[16-22]位来直接得到Delta’通用机EMM运行结果0x884C0000 0x884B00002.参考代码1.//通过调用LoadDriver()和OpenDriver获得WinRing0.sys获取Ring0权限,直接与硬件交互的权限2.BOOL Initialize()3.{4. LoadDriver();//加载"WinRing0.sys"5. OpenDriver();6.}7.//主操作8.void CCPUTemperatureDlg::OnTimer(UINT_PTR nIDEvent)9.{10. DWORD eax_in;11. DWORD eax_out;12. ofstream os("b.txt");13.14. //以eax=1执行CPUID指令, 将得到CPU Signature15. eax_in= 1;16. eax_out= GetCpuInfo(eax_in);17. os<<"Signature, CPUID.EAX="<<eax_in<<": "<<hex<<eax_out<<endl;18.19. //以eax=0执行CPUID指令得到支持的最大指令数20. eax_in= 0;21. eax_out= GetCpuInfo(eax_in);22. os<<"Max Command, CPUID.EAX="<<eax_in<<": "<<hex<<eax_out<<endl;23.24. //以eax=6执行CPUID指令,其中第0位为0表示支持DTS25. eax_in= 6;26. eax_out= GetCpuInfo(eax_in);27. os<<"Support DTS, CPUID.EAX="<<eax_in<<": "<<hex<<eax_out<<endl;28.29. CEdit *edit=(CEdit*)GetDlgItem(IDC_EDIT1);30. CEdit *edit1=(CEdit*)GetDlgItem(IDC_EDIT2);31. DWORD eax=0,edx=0;32. ULONG result;33. char s[20];34. int activationTemperature;//Tjunction35. int comparativeTemperature;//Delta’36.37. // 0xee来读取MSR的30位,如果是0,Tjunction为100℃,反之为85℃,此处通用机数据无效38. Rdmsr(0xee,&eax,&edx);39. os<<"100 or 85, Rdmsr.eeH: "<<hex<<eax<<endl;40.41. //通过0x1A2来读取MSR的[16-22]位来直接得到Tjunction,此处EMM数据无效42. Rdmsr(0x1a2,&eax,&edx);43. os<<"Rdmsr.1A2H: "<<hex<<eax<<endl;44. activationTemperature= (eax&0x007f0000)>>16;45. os<<"Activation temperation: "<<activationTemperature<<endl;46.47. //通过0x19C来读取MSR的[16-22]位来直接得到Core 1的Delta’并计算温度48. result=SetThreadAffinityMask(GetCurrentThread(),1);49. Rdmsr(0x19c,&eax,&edx);//read Temperature50. os<<"Rdmsr.19CH: "<<hex<<eax<<endl;51. comparativeTemperature= (eax&0x007f0000)>>16;52. os<<"comparativeTemperature 1: "<<comparativeTemperature<<endl;53. SetThreadAffinityMask(GetCurrentThread(),result);54. sprintf(s,"%d",activationTemperature- comparativeTemperature);55. edit->SetWindowText(s);56.57. //通过0x19C来读取MSR的[16-22]位来直接得到Core 2的Delta’并计算温度58. result=SetThreadAffinityMask(GetCurrentThread(),4);59. Rdmsr(0x19c,&eax,&edx);//read Temperature60. os<<"Rdmsr.19CH: "<<hex<<eax<<endl;61. comparativeTemperature= (eax&0x007f0000)>>16;62. os<<"comparativeTemperature 2: "<<comparativeTemperature<<endl;63. SetThreadAffinityMask(GetCurrentThread(),result);64. sprintf(s,"%d",activationTemperature- comparativeTemperature);65. edit1->SetWindowText(s);66.67. CDialog::OnTimer(nIDEvent);68.}69.//主要用来获取Ring0权限70.void LoadDriver()71.{72. SC_HANDLE hSCManager = NULL;73. SC_HANDLE hService = NULL;74. SC_HANDLE hService1 = NULL;75. hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);76. hService = CreateService(hSCManager,77.MYWINRIN0,78.MYWINRIN0,79.SERVICE_ALL_ACCESS,80.SERVICE_KERNEL_DRIVER,81.SERVICE_DEMAND_START,82.SERVICE_ERROR_NORMAL,83.gDriverPath,84.NULL,85.NULL,86.NULL,87.NULL,88.NULL89.);90. CloseServiceHandle(hService);91. hService1 = OpenService(hSCManager, MYWINRIN0, SERVICE_ALL_ACCESS);92. int result=StartService(hService1, 0, NULL);93. CloseServiceHandle(hSCManager);94. CloseServiceHandle(hService1);95.}96.BOOL OpenDriver()97.{98. char message[256];99. char *str=_T("\\\\.\\") OLS_DRIVER_ID;100.gHandle = CreateFile(101._T("\\\\.\\") OLS_DRIVER_ID,102.GENERIC_READ | GENERIC_WRITE,103.0,104.NULL,105.OPEN_EXISTING,106.FILE_ATTRIBUTE_NORMAL,107.NULL108.);109.int code=GetLastError();110.if(gHandle == INVALID_HANDLE_VALUE)111.{112.return FALSE;113.}114.return TRUE;115.}116.//执行CPUID命令117.DWORD GetCpuInfo( DWORD veax)118.{119.DWORD deax, debx, decx, dedx;120.__asm121.{122.push eax;123.push ebx;124.push ecx;125.push edx;126.127.mov eax, veax;128.cpuid;129.mov deax, eax;130.mov debx, ebx;131.mov decx, ecx;132.mov dedx, edx;133.134.pop edx;135.pop ecx;136.pop ebx;137.pop eax;138.}139.return deax;140.}141.//读取msr寄存器142.BOOL WINAPI Rdmsr(DWORD index, PDWORD eax, PDWORD edx)143.{144.if(gHandle == INVALID_HANDLE_VALUE)145.{146.return FALSE;147.}148.if(eax == NULL || edx == NULL || gIsMsr == FALSE)149.{150.return FALSE;151.}152.DWORD returnedLength = 0;153.BOOL result = FALSE;154.BYTE outBuf[8] = {0};155.result = DeviceIoControl(156.gHandle,157.IOCTL_OLS_READ_MSR,//#define IOCTL_OLS_READ_MSR \158.//CTL_CODE(OLS_TYPE, 0x821, METHOD_BUFFERED, FILE_ANY_ACCESS) 159.&index,160.sizeof(index),161.&outBuf,162.sizeof(outBuf),163.&returnedLength,164.NULL165.);166.if(result)167.{168.memcpy(eax, outBuf, 4);169.memcpy(edx, outBuf + 4, 4);170.}171.if(result)172.{173.return TRUE;174.}175.else176.{177.return FALSE;178.}179.}。

怎么获取CPU的温度

怎么获取CPU的温度

怎么获取CPU的温度你知道如何获取CPU的温度吗?跟着店铺一起学习获取CPU的温度的方法吧。

作为一个系统级程序员或者编程爱好者,掌握一些系统的高级编程技巧是非常有意义的。

本文将介绍如何利用一些高级的编程技巧来实现动态监控。

虽然Windows 98“系统工具”中的“资源状况”程序能够监视CPU的资源占用状况,但是那些相关的数据却无法传递到我们自己的程序中。

为此,笔者用VB 6编写了一个具有上述功能的CPU监视软件,它可以实现对CPU资源状况的监视并取得有关数据,并且能够显示到一个精致的图示窗口中。

编程原理CPU的资源占用情况真正反映在CMOS中,但是如果我们直接从这里开始编程,那将是一件非常复杂的工作。

幸好,Windows 98已经帮我们做好了这一步,它的底层技术能够从CMOS中获取CPU的资源占用状况参数并且记录到注册表中“HKEY_DYN_DATA\PerfStats\StatData”的分支“KERNEL\CPUUsage”中,通过周期性地读取该键的键值,并且将参数传递到我们自己制作的监视器界面或者有关变量中,就可以即时获得并反映出CPU的使用状况了。

本程序的关键是以通用的方法获取相关键值并反映输出到自制的动态进度监视器上,为了更有利于观察、分析,我们将添加一个简单的趋势分析平均线。

通过本文,初学者还将能了解如何从注册表的指定项获取数据和利用Picture控件实现进度指示器的编程技巧。

获取CPU的温度的方法1.设计程序界面首先运行VB 6中文版,建立一个标准的exe工程,将窗体命名为frmmain,borderstyle属性设为:3-fixed,caption,属性设置为空;接着添加一个frame控件——“frame1”,caption属性设置为空,再添加picturebox控件pctPrg,前景色为绿色,背景色为浅红色;最后添加一个定时器控件——“timer”,interval设置为100(当然,也可以根据自己的需要设置读取间隔),enabled设置为true,其他的属性采用系统的默认值,调整窗体和控件到适当位置和适当大小即可(参见附图)。

everest如何查询cpu温度

everest如何查询cpu温度

everest如何查询cpu温度everest想要查询下cpu温度!但是又不会,该怎么办呢?面由店铺给你做出详细的everest查询cpu温度方法介绍!希望对你有帮助! everest查询cpu温度方法一Everest现在已经更名叫Aida64了。

1、打开Aida64。

2、点左面的计算机,再点传感器,就能看到CPU温度了。

下面是我的CPU温度。

我是I7的CPU,有4个核所以有好几个温度值。

everest查询cpu温度方法二旧版本的是在计算机->传感器里边侧边栏是在设置里的硬件监控工具里边OSD 或者 Vista边栏(然后小工具里面启用,Win7也能用) everest查询cpu温度方法三打开软件,点击“计算机”下的“传感器”,稍等几秒待检测出结果后就可以看到主板、CPU、硬盘等的温度了。

多少才正常这并没有确定的值,AMD和INTEL的各都不一样,它们的不同系列的CPU合理温度也不尽相同。

所以要看具体是哪款CPU才行。

即使知道CPU,不同品牌、型号的主板探测出来的温度也不一定同样相关阅读:cpu工作过程各种控制命令,执行微操作系列,从而完成一条指令的执行。

指令是计算机规定执行操作的类型和操作数的基本命令。

指令是由一个字节或者多个字节组成,其中包括操作码字段、一个或多个有关操作数地址的字段以及一些表征机器状态的状态字以及特征码。

有的指令中也直接包含操作数本身。

提取第一阶段,提取,从存储器或高速缓冲存储器中检索指令(为数值或一系列数值)。

由程序计数器(Program Counter)指定存储器的位置。

(程序计数器保存供识别程序位置的数值。

换言之,程序计数器记录了CPU在程序里的踪迹。

)解码线路CPU根据存储器提取到的指令来决定其执行行为。

在解码阶段,指令被拆解为有意义的片段。

根据CPU的指令集架构(ISA)定义将数值解译为指令。

一部分的指令数值为运算码(Opcode),其指示要进行哪些运算。

其它的数值通常供给指令必要的信息,诸如一个加法(Addition)运算的运算目标。

如何在Mac中查看CPU温度

如何在Mac中查看CPU温度

如何在Mac中查看CPU温度在Mac中查看CPU温度并非一项困难的任务。

准确监测CPU温度对于用户来说非常重要,因为它可以帮助我们识别系统是否过热,从而采取适当的措施来保护我们的设备。

本文将介绍如何使用不同的方法在Mac上查看CPU温度。

一、使用iStat Menus来查看CPU温度iStat Menus是一款非常强大的系统监测工具,它可以在菜单栏中实时显示各种系统状态信息,包括CPU温度。

下面是使用iStat Menus查看CPU温度的步骤:1. 在App Store中下载并安装iStat Menus应用程序。

2. 打开iStat Menus,并在菜单栏中找到它的图标。

3. 点击iStat Menus图标,从弹出的菜单中选择"传感器"。

4. 在传感器窗口中,您将看到各种传感器的信息,包括CPU温度。

二、使用Intel Power Gadget来查看CPU温度Intel Power Gadget是一款由Intel开发的工具,旨在帮助用户监测和优化CPU的能量效率。

它还提供了有关CPU温度的实时信息。

以下是使用Intel Power Gadget查看CPU温度的步骤:1. 前往Intel官方网站,下载并安装Intel Power Gadget应用程序。

2. 打开Intel Power Gadget,并找到它的图标。

3. 点击Intel Power Gadget图标,在弹出的窗口中,您将看到CPU的实时温度。

三、使用第三方软件来查看CPU温度除了iStat Menus和Intel Power Gadget,还有其他一些第三方软件可以帮助您在Mac上查看CPU温度。

以下是一些可供选择的第三方软件:1. Macs Fan Control:它不仅可以监测CPU温度,还可以调节风扇转速,帮助您保持CPU温度在适当的范围内。

2. Temperature Monitor:这是一款简单易用的应用程序,可以显示CPU温度及其他硬件传感器的数据。

360查看电脑cpu温度的方法

360查看电脑cpu温度的方法

360查看电脑cpu温度的方法以360查看电脑CPU温度的方法为题,我们来了解一下如何使用360软件来查看电脑CPU温度。

我们需要下载并安装360安全卫士软件。

安装完成后,打开软件并进入“工具箱”选项。

在工具箱中,我们可以找到“CPU温度监控”功能。

点击“CPU温度监控”功能,软件会开始检测电脑的CPU温度。

在检测过程中,我们需要保持电脑正常运行,不要进行过多的操作以免干扰温度监测结果的准确性。

检测完成后,软件会显示出当前电脑CPU的温度信息。

通常情况下,软件会以数字形式显示出CPU的温度数值,并附带一个温度范围作为参考。

我们可以根据这个参考范围来判断CPU的温度是否正常。

如果CPU的温度超出了正常范围,我们可以考虑一些降温措施。

首先,确保电脑的散热系统正常运行,清理散热器上的灰尘和杂物。

其次,可以使用降温软件来帮助降低CPU的温度,例如使用软件调节CPU的频率和电压来减少发热量。

除了使用360软件来查看CPU温度,我们还可以通过BIOS来查看CPU温度。

进入电脑的BIOS界面,通常可以通过按下“Delete”、“F2”或其他指定的按键来进入BIOS。

在BIOS界面中,我们可以找到CPU温度的相关信息,并进行查看和监控。

需要注意的是,无论是使用360软件还是BIOS来查看CPU温度,都需要注意一些细节。

首先,不要过度依赖软件或BIOS的温度显示,因为它们可能存在一定的误差。

其次,在查看CPU温度时,要综合考虑其他因素,如环境温度、电脑负载等,以确定CPU的实际工作温度。

总结一下,使用360软件来查看电脑CPU温度是一种简单方便的方法。

通过安装并打开360安全卫士软件,进入工具箱中的“CPU 温度监控”功能,我们可以轻松地获取到电脑CPU的温度信息。

当然,在查看CPU温度时,我们也需要综合考虑其他因素,并采取相应的措施来保证CPU的正常工作温度。

查看cpu温度的 powershell命令

查看cpu温度的 powershell命令

查看cpu温度的powershell命令【摘要】本文将介绍如何使用PowerShell命令来查看CPU温度以及重要性。

在会说明PowerShell命令的概念以及为什么需要查看CPU温度。

接着,正文部分将详细解释如何使用PowerShell命令来观察CPU温度,示例命令和如何解读温度数据,常用参数,以及其他方式查看CPU温度。

结论部分将强调了解CPU温度对计算机性能的重要性,掌握使用PowerShell命令的方法以及保持CPU适当温度范围的重要性。

通过本文的阅读,读者将能够更好地了解CPU温度对计算机性能的影响,并学会用PowerShell命令来监控和维护CPU温度,从而延长计算机的寿命。

【关键词】关键词:Powershell命令、CPU温度、查看、数据解读、参数、计算机性能、寿命延长。

1. 引言1.1 什么是powershell命令PowerShell 是由微软开发的一种任务自动化和配置管理框架,同时也是一个命令行shell 和脚本语言。

PowerShell 主要运行在Windows 系统上,并且具有强大的管理功能,可用于系统管理员执行各种任务,包括查看CPU 温度。

PowerShell 命令是在PowerShell 环境下输入的命令,用于执行各种操作。

通过PowerShell 命令可以实现自动化任务、系统管理、监控等功能。

在查看CPU 温度方面,可以编写PowerShell 脚本来获取CPU 信息并显示温度数据。

PowerShell 命令是由一组动词和名词组合而成的,例如Get-Process、Get-WmiObject 等。

这些命令可以用于获取系统信息,并可以通过管道操作符将输出传递给其他命令进行处理。

1.2 为什么要查看cpu温度查看CPU温度在计算机维护和性能优化中起着至关重要的作用。

CPU是计算机的大脑,它负责处理大量的数据和运行各种程序。

CPU在工作过程中会产生大量的热量,如果过热会导致性能下降甚至损坏硬件。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

获取CPU的温度的方法
在内存配置较低的计算机中(比如内存32MB,Windows 98第二版),CPU的占有率是较高的,一般能够达到50%,这可能是由于系统需要CPU进行许多的运算模拟来弥补资源的不足。

下面是收集获取CPU温度的方法,欢迎阅读。

作为一个系统级程序员或者编程爱好者,掌握一些系统的高级编程技巧是非常有意义的。

本文将介绍如何利用一些高级的编程技巧来实现动态监控。

虽然Windows 98“系统工具”中的“资源状况”程序能够监视CPU的资源占用状况,但是那些相关的数据却无法传递到我们自己的程序中。

为此,笔者用VB 6编写了一个具有上述功能的CPU监视软件,它可以实现对CPU资源状况的监视并取得有关数据,并且能够显示到一个精致的图示窗口中。

编程原理
CPU的资源占用情况真正反映在CMOS中,但是如果我们直接从这里开始编程,那将是一件非常复杂的工作。

幸好,Windows 98已经帮我们做好了这一步,它的底层技术能够从CMOS中获取CPU的资源占用状况参数并且记录到注册表中
“HKEY_DYN_DATA\PerfStats\StatData”的分支“KERNEL\CPUUsage”中,通过周期性地读取该键的键值,并且将参数传递到我们自己制作的监视器界面或者有关变量中,就可以即时获得并反映出CPU的使用状况了。

本程序的关键是以通用的方法获取相关键值并反映输出到自制的动态进度监视器上,为了更有利于观察、分析,我们将添加一个简单的趋势分析平均线。

通过本文,初学者还将能了解如何从注册表的指定项获取数据和利用Picture控件实现进度指示器的编程技巧。

1.设计程序界面
首先运行VB 6中文版,建立一个标准的exe工程,将窗体命名为frmmain,borderstyle属性设为:3-fixed,caption,属性设置为空;接着添加一个frame控件——“frame1”,caption属性设置为空,再添加picturebox控件pctPrg,前景色为绿色,背景色为浅红色;最后添加一个定时器控件——“timer”,interval设置为100(当然,也可以根据自己的需要设置读取间隔),enabled设置为true,其他的属性采用系统的默认值,调整窗体和控件到适当位置和适当大小即可(参见附图)。

2.编写程序代码,双击窗体frmmain并输入以下代码
Option Explicit '变量检查
Private Declare Function RegQueryValueEx Lib
"advapi32.dll " Alias "RegQueryValueExA " (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
'获取一个指定的注册表项的设置值
Private Declare Function RegOpenKey Lib "advapi32.dll " Alias "RegOpenKeyA " (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
'打开一个指定的的注册表项
Private Declare Function RegCloseKey Lib "advapi32.dll " (ByVal hKey As Long) As Long
'关闭系统注册表中的指定项(或指定键)
Private Const REG_DWORD = 4
Private Const HKEY_DYN_DATA = &&H80000006
'这两个常数是读写注册表必须的
'以上API函数和常数结合能够实现对注册表任意指定项的访

Private Avg As Long
'CPU 资源占用参数平均数
Private Sum As Long
'CPU 资源占用参数合计数
Private Index As Long '统计次数
'窗体级函数、常数和变量声明结束
Private Function GetCPUUsage() As Long
On Error Resume Next
'忽略可能产生的错误
Dim Data As Long, Typ As Long, Size As Long
Dim hKey As Long
Dim hRet As Long
hRet = RegOpenKey(HKEY_DYN_DATA, "PerfStats\StatData ", hKey)
'打开该主键
hRet = RegQueryValueEx(hKey, "KERNEL\CPUUsage ", 0&&, REG_DWORD, Data, 4)
'读取主键值
GetCPUUsage = Data
' 为自定义函数赋值
hRet = RegCloseKey(hKey)
'关闭该主键
End Function
Private Sub Form_Load()
'初始化标题和提示信息
Dim hKey As Long, Data As Long
App.Title = "CPU监视器占有率: "
Me.Caption = App.Title
'初始化应用程序标题栏
pctPrg.ToolTipText = "单击右键退出程序! "
RegOpenKey HKEY_DYN_DATA, "PerfStats\ StartStat ", hKey
RegQueryValueEx hKey, "KERNEL\CPUUsage ", 0, REG_DWORD, Data, 4
RegCloseKey hKey
'打开注册表的资源监控标识
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
'程序结束前关闭定时器
Timer.Enabled = False
End Sub
Private Sub Form_Unload(Cancel As Integer)
End '结束程序
End Sub
Private Sub pctPrg_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
'右键单击退出程序
If Button = 2 Then
Unload Me
End If
End Sub
Private Sub Timer_Timer()
'利用定时器周期性地读取资源状况
'本程序每隔0.1秒读取一次数据
Dim tmp As Long ' CPU资源占用状况参数
tmp = GetCPUUsage '获得参数
Me.Caption = App.Title && FormatPercent(tmp / 100) ' '在窗体标题栏用百分比数字形式反映占用率
Sum = Sum + tmp '累加统计
Index = Index + 1 '次数统计
Avg = Int(Sum / Index) ' 求平均值
pctPrg.Cls ' 清除图示内容
pctPrg.Line (0, 0)-(tmp, 18), ,&& BF
'以绿色图示资源占用状况
pctPrg.Line (Avg, 0)-(Avg, 18), &&HFF
'以深红色画出平均线
pctPrg.Line (Avg + 1, 0)-(Avg + 1, 18), &&HFF
End Sub
'程序结束
通过以上步骤,装备精良的CPU监视器就制作完成了。

注意事项
需要说明的是,在内存配置较低的计算机中(比如内存32MB,Windows 98第二版),CPU的占有率是较高的,一般能够达到50%,这可能是由于系统需要CPU进行许多的运算模拟来弥补资源的不足。

然而在88MB内存,同样操作系统的机器上,占有率一般只有10%。

另外,本文主窗体中定时器运行过程函数中调用的FormatPercent函数是VB 6.0新添加的一个函数,它的作用是将一个表达式转化成百分数。

用VB 5.0开发的读者需要采取其他变通方法,以实现监控CPU 功能。

本程序在Windows 98第二版、VB 6.0中文企业版下测试通过。

相关文章:
1.笔记本CPU温度在哪些范围算正常
2.bios中如何查看cpu温度
3.CPU温度过高怎么办
4.笔记本cpu温度高怎么办
5.笔记本电脑cpu温度过高怎么办
6.台式电脑cpu温度过高怎么办
7.CPU温度过高的原因
8.电脑cpu温度过高怎么办
9.看电影cpu温度高怎么办
10.玩大型游戏cpu温度多少正常。

相关文档
最新文档