当前位置:中国易下载软件教材中心文章中心编程语言VB语言 → 用VB6编程监控CPU的资源状况

用VB6编程监控CPU的资源状况

减小字体 增大字体 作者:佚名  来源:不详  发布时间:2007-8-21 1:01:44
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
喜欢这些内容嘛,请告诉你身边的朋友,易下载中心-QQ资源-itnetcn.com一起享受这份乐趣,本站内容来源互联网
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

用VB6编程监控CPU的资源状况xCa海岸线网络安全资讯站
(邹刚 2001年09月14日 09:25)xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
作为一个系统级程序员或者编程爱好者,掌握一些系统的高级编程技巧是非常有意义的。本文将介绍如何利用一些高级的编程技巧来实现动态监控。 xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
虽然Windows 98“系统工具”中的“资源状况”程序能够监视CPU的资源占用状况,但是那些相关的数据却无法传递到我们自己的程序中。为此,笔者用VB 6编写了一个具有上述功能的CPU监视软件,它可以实现对CPU资源状况的监视并取得有关数据,并且能够显示到一个精致的图示窗口中。 xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
编程原理 xCa海岸线网络安全资讯站
CPU的资源占用情况真正反映在CMOS中,但是如果我们直接从这里开始编程,那将是一件非常复杂的工作。幸好,Windows 98已经帮我们做好了这一步,它的底层技术能够从CMOS中获取CPU的资源占用状况参数并且记录到注册表中“HKEY_DYN_DATAPerfStatsStatData”的分支“KERNELCPUUsage”中,通过周期性地读取该键的键值,并且将参数传递到我们自己制作的监视器界面或者有关变量中,就可以即时获得并反映出CPU的使用状况了。 xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
本程序的关键是以通用的方法获取相关键值并反映输出到自制的动态进度监视器上,为了更有利于观察、分析,我们将添加一个简单的趋势分析平均线。通过本文,初学者还将能了解如何从注册表的指定项获取数据和利用Picture控件实现进度指示器的编程技巧。 xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
开发步骤 xCa海岸线网络安全资讯站
1.设计程序界面 xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
首先运行VB 6中文版,建立一个标准的exe工程,将窗体命名为frmmain,borderstyle属性设为:3-fixed,caption,属性设置为空;接着添加一个frame控件——“frame1”,caption属性设置为空,再添加picturebox控件pctPrg,前景色为绿色,背景色为浅红色;最后添加一个定时器控件——“timer”,interval设置为100(当然,也可以根据自己的需要设置读取间隔),enabled设置为true,其他的属性采用系统的默认值,调整窗体和控件到适当位置和适当大小即可(参见附图)。 xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
2.编写程序代码,双击窗体frmmain并输入以下代码 xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
Option Explicit注释:变量检查 xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
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 xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
注释:获取一个指定的注册表项的设置值 xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
注释:打开一个指定的的注册表xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
注释:关闭系统注册表中的指定项(或指定键) xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
Private Const REG_DWORD = 4 xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
Private Const HKEY_DYN_DATA = &&H80000006 xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
注释:这两个常数是读写注册表必须的 xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
注释:以上API函数和常数结合能够实现对注册表任意指定项的访问 xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
Private Avg As Long xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
注释:CPU 资源占用参数平均数 xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
Private Sum As Long xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
注释:CPU 资源占用参数合计数 xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
Private Index As Long 注释:统计次数 xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
注释:窗体级函数、常数和变量声明结束 xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
Private Function GetCPUUsage() As Long xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
On Error Resume Next xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
注释:忽略可能产生的错误 xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
Dim Data As Long, Typ As Long, Size As Long xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
Dim hKey As Long xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
Dim hRet As Long xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
hRet = RegOpenKey(HKEY_DYN_DATA, "PerfStatsStatData", hKey) xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
注释:打开该主键 xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
hRet = RegQueryValueEx(hKey, "KERNELCPUUsage", 0&&, REG_DWORD, Data, 4) xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
注释:读取主键值 xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
GetCPUUsage = Data xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
注释: 为自定义函数赋值 xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
hRet = RegCloseKey(hKey) xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
注释:关闭该主键 xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
End Function xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
Private Sub Form_Load() xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
注释:初始化标题和提示信息 xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
Dim hKey As Long, Data As Long xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
App.Title = "CPU监视器 占有率:" xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
Me.Caption = App.Title xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
注释:初始化应用程序标题栏 xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
pctPrg.ToolTipText = "单击右键退出程序!" xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
RegOpenKey HKEY_DYN_DATA, "PerfStats StartStat", hKey xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
RegQueryValueEx hKey, "KERNELCPUUsage", 0, REG_DWORD, Data, 4 xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
RegCloseKey hKey xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
注释:打开注册表的资源监控标识 xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
End Sub xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
注释:程序结束前关闭定时器 xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
Timer.Enabled = False xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
End Sub xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
Private Sub Form_Unload(Cancel As Integer) xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
End注释:结束程序 xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
End Sub xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
Private Sub pctPrg_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
注释:右键单击退出程序 xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
If Button = 2 Then xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
Unload Me xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
End If xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
End Sub xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
Private Sub Timer_Timer() xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
注释:利用定时器周期性地读取资源状况 xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
注释:本程序每隔0.1秒读取一次数据 xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
Dim tmp As Long 注释: CPU资源占用状况参数 xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
tmp = GetCPUUsage 注释:获得参数 xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
Me.Caption = App.Title && FormatPercent(tmp / 100) 注释: xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
注释:在窗体标题栏用百分比数字形式反映占用率 xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
Sum = Sum + tmp 注释:累加统计 xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
Index = Index + 1 注释:次数统计 xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
Avg = Int(Sum / Index) 注释: 求平均值 xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
pctPrg.Cls 注释: 清除图示内容 xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
pctPrg.Line (0, 0)-(tmp, 18), ,&& BF xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
注释:以绿色图示资源占用状况 xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
pctPrg.Line (Avg, 0)-(Avg, 18), &&HFF xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
注释:以深红色画出平均线 xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
pctPrg.Line (Avg + 1, 0)-(Avg + 1, 18), &&HFF xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
End Sub xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
注释:程序结束 xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
通过以上步骤,装备精良的CPU监视器就制作完成了。 xCa海岸线网络安全资讯站
xCa海岸线网络安全资讯站
注意事项 xCa海岸线网络安全资讯站
需要说明的是,在内存配置较低的计算机中(比如内存32MB,Windows 98第二版),CPU的占有率是较高的,一般能够达到50%,这可能是由于系统需要CPU进行许多的运算模拟来弥补资源的不足。然而在88MB内存,同样操作系统的机器上,占有率一般只有10%。另外,本文主窗体中定时器运行过程函数中调用的FormatPercent函数是VB 6.0新添加的一个函数,它的作用是将一个表达式转化成百分数。用VB 5.0开发的读者需要采取其他变通方法,以实现监控CPU功能。本程序在Windows 98第二版、VB 6.0中文企业版下测试通过。 xCa海岸线网络安全资讯站