问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

获取CPU的温度的方法

发布网友 发布时间:2022-09-14 18:36

我来回答

1个回答

热心网友 时间:2024-11-16 11:58

  在内存配置较低的计算机中(比如内存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控件实现进度指示器的编程技巧。

  获取CPU的温度的方法

  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中文企业版下测试通过。



 


声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
谷歌浏览器怎么设置成中文_谷歌浏览器设置中文语言 【谷歌浏览器技巧】谷歌浏览器如何更改语言? 史上最全ETF全解 证券ETF是深市的吗 怎样把莲藕肉丸子做的好吃? 高三语文小说赏析小说形象分析与答题技巧 人物形象题答题技巧 借助什么分析小说的人物形象 脖子旁边疼是什么原因 在群里不是好友怎么把群里人建另一个群 手机桌面图标怎么恢复原状 砖厂合作办厂协议书 亚辉龙是世界500强吗 787575开吗 拼多多订单删除了在哪里可以找得到 女生貔貅戴哪只手,貔貅应该戴在哪只手呢?有什么讲究 微信摇一摇 怎么摇到点赞最多的 喇叭花什么时候开放 打高尔夫球的都有哪些好处 英雄联盟好玩还是风暴英雄好玩? 2022风暴英雄有多少人玩 为什么儿童常吃糖容易造成口臭? 冬至养生进补食谱 怎么在抖音app里删除评论? 三个月的婴儿用纸尿裤好还是拉拉裤好 伦字五行是什么 炜伦的意思是什么 谁有在线翻译维语的网站撒? 哪里有维吾尔语好用的翻译软件 维汉互译词典怎么下载 VB 如何得到CPU温度呢? ktv带动气氛的歌曲 邮政跨省取款手续费多少? 按多少收取 比如我取款3万 要多少手续费... "将错就错"的"将"是什么意思? 只解释"将"字 海信电视怎样安装电视猫? 海信智能电视怎么安装电视猫 如何在海信电视上安装电视猫软件 人大的专门委员会与工作委员会区别 人大专门委员会与工作委员会由什么区别 保密领导工作小组和保密委员会有什么区别 人大委员会和工作委员会的区别 人大专门委员会和人大工作委员会有什么区别? 华为手机怎么收不到短信 央行金融市场司司长:继续严控房地产在信贷资源中的占比 安全卫士都处理电脑卡怎么办 炸鸡翅怎么做好吃,简单酥炸鸡翅的家常做法 宝宝偏头睡,脸一边大一边小怎么办 九个月宝宝脸部有点睡偏了,一边大一边小怎么办 鼻毛为什么剪不得? 我一直有剪鼻毛的习惯,现在总是鼻子不通气