设为主页 | 加入收藏 | 繁體中文

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

  作为一个系统级步伐员或者编程爱好者,掌握一些系统的初级编程技巧黑白常有意义的。本文将介绍如何利用一些初级的编程技巧来实现静态监控。
  虽然Windows 98“系统工具”中的“资源状态”步伐可以或许监视CPU的资源占用状态,但是那些相干的数据却无法传递到我们本身的步伐中。为此,笔者用VB 6编写了一个具有上述功能的CPU监视软件,它可以实现对CPU资源状态的监视并取得有关数据,而且可以或许表现到一
  个风雅的图示窗口中。
  编程原理
  CPU的资源占用环境真正反应在CMOS中,但是要是我们直接从这里开端编程,那将是一件非常复杂的工作。幸好,Windows 98已经帮我们做好了这一步,它的底层技能可以或许从CMOS中获取CPU的资源占用状态参数而且记录到注册表中“HKEY_DYN_DATAPerfStatsStatData”的分支“KERNELCPUUsage”中,通过周期性地读取该键的键值,而且将参数传递到我们本身制造的监视器界面或者有关变量中,就可以即时获得并反应出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, "PerfStatsStatData", hKey)
  '翻开该主键
  hRet = RegQueryValueEx(hKey, "KERNELCPUUsage", 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, "KERNELCPUUsage", 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中文企业版下测试通过。
 


    文章作者: 福州军威计算机技术有限公司
    军威网络是福州最专业的电脑维修公司,专业承接福州电脑维修、上门维修、IT外包、企业电脑包年维护、局域网网络布线、网吧承包等相关维修服务。
    版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 、作者信息和声明。否则将追究法律责任。

TAG:
评论加载中...
内容:
评论者: 验证码: