转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> VB.NET程序 >> 正文
一个小巧精致的CPU监视器         ★★★★

一个小巧精致的CPU监视器

作者:闵涛 文章来源:闵涛的学习笔记 点击数:769 更新时间:2009/4/23 14:59:31
  我们在运行一些系统占用率比较高的程序时,为了避免出现资源不足而运行失败或者速度非常慢的情况,应该首先确定当前的CPU使用情况。我们一般是使用“系统工具”中的“资源状况”工具,它虽然比较全面和易用,但是自身却又消耗了较多资源,而且它的那些附属的功能都是我们所不需要的,因此,我们可以考虑自己编程实现对CPU资源状况的监视。笔者经过一番探索,开发了一个小巧精致的CPU监视器,它不仅界面友好,而且占用资源极少,确实可以取代windows的“资源状况”程序。

  (一)编程原理;

  CPU的资源占用状况被记载在注册表的项目HKEY_DYN_DATA\PerfStats\StatData分支“KERNEL\CPUUsage"中,通过周期性的读取该键的键值,并且将参数传递到我们自己制作的监视器界面中,使之相应的变化,这就可以即时反映出CPU的使用状况了。本文程序中的关键是相关键值的读取和反映输出到监视器上。

  (二)编程实践;

  (1)设计程序界面;

  为了达到较小CPU占有率,必须将应用程序设计的既能够全面反映问题,又能够尽量的小。首先建立一个标准exe工程,将窗体命名为frmmain,borderstyle属性为3-fixed,caption属性为空白,添加一个frame控件“frame1”,caption属性为空白,添加picturebox控件,前景色为绿色,背景色为浅红色,添加一个定时器控件“timer”,interval设置为100,enabled为true,其他的属性采用系统的默认值即可,调整窗体和控件到适当位置和适当大小,效果如图2所示即可。

  双击窗体frmmain,写入以下代码:

  Option Explicit
  Private Const LP-HT-CAPTION = 2
  Private Const WM-NCLBUTTONDOWN = &HA1
  Private Declare Function ReleaseCapture Lib “user32" () As Long
  Private Declare Function SendMessage Lib “user32" Alias“SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  Private CPU As New CPUUsage
  Private Avg As Long
  Private Sum As Long
  Private Index As Long
  Private Sub Form_Load()
  Me.Caption = App.Title ‘初始化应用程序标题栏
  CPU.InitCPUUsage
  End Sub
  Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) ‘程序结束前关闭定时器和释放内存
  Timer.Enabled = False
  Set CPU = Nothing
  Cancel = 0
  End Sub
  Private Sub Frame1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) ‘用左键可以拖动程序
  Call Form_MouseDown(Button, Shift, X, Y)
  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
  End If
  Call Form_MouseDown(Button, Shift, X, Y)
  End Sub
  Private Sub Timer_Timer() ‘利用定时器周期性的读取资源状况
  Dim tmp As Long
  tmp = CPU.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
  Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) ‘使程序可以被拖动
  Dim rc As Long
  rc = ReleaseCapture
  rc = SendMessage(hwnd, WM-NCLBUTTONDOWN, LP_HT-CAPTION, ByVal 0&)
  End Sub
  (2)编写读取注册表中CPU使用状况的类模块;
  添加一个类模块,命名为“CPUusage”,写入以下代码:
  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
  Public Sub InitCPUUsage()
  Dim Data As Long, Typ As Long, Size As Long
  Dim hKey As Long, hRet As Long
  hRet = RegOpenKey(HKEY-DYN-DATA, “PerfStats\StartStat", hKey)
  hRet = Reg QueryValueEx(hKey, “KERNEL\CPUUsage", 0, REG-DWORD, Data, 4)
  hRet = RegCloseKey(hKey)
  End Sub
  Public Function GetCPUUsage() As Long
  On Error GoTo eee ‘如果注册表错误的话转到eee:
  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)
  Exit Function
  eee:


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台