说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

一个小巧精致的CPU监视器 -VB资料

HTML文档下载 WORD文档下载 PDF文档下载
一个小巧精致的CPU监视器 -VB资料
我们在运行一些系统占用率比较高的程序时,为了避免出现资源不足而运行失败或者速度非常慢的情况,应该首先确定当前的CPU使用情况。我们一般是使用“系统工具”中的“资源状况”工具,它虽然比较全面和易用,但是自身却又消耗了较多资源,而且它的那些附属的功能都是我们所不需要的,因此,我们可以考虑自己编程实现对CPU资源状况的监视。笔者经过一番探索,开发了一个小巧精致的CPU监视器,它不仅界面友好,而且占用资源极少,确实可以取代windows的“资源状况”程序(见图1)。
  (一)编程原理;
  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:
  MsgBox “注册表参数读取出现了错误!", vbExclamation
  End Function
  好了,一个装备精良的CPU监视器制造完毕,寥寥几行代码确可以完成一项大工作。另外,使用vb5的朋友注意了,本文主窗体中定时器运行过程函数中的FormatPercent函数只能在vb6中使用,它的作用是将一个表达式转化成百分数,你必须采用其他的变通方法,其他代码全部通用。
  对于国内的程序员来说,涉及windows高级编程的相关资料和示例代码非常少,这在一定程度上限制了程序员的开发高级应用程序能力。本文中的示例不仅仅涉及了注册表的读取,而且演示了图示的技巧,希望诸位编程高手能够有所借鉴和斧正。
  (河南 新天)
豌豆“荚”油!B轮融资1.2亿美元的豌豆荚 2013年终盘点:10款最精巧的硬件开发板 SquareWear:可替代Lilypad Arduino的开发板 开放数据:2014年最热门的竞争领域 IE11虚拟机免费面向广大开发者 九城搭建的一个以Hadoop为基础的大数据平台 Windows 8复杂性的代价到底有多大? 在发布前,第一代iPhone其实并不完善 市场占有率调查:iOS 7秒杀Android 4.4 AWS会赢、OpenStack会消亡、Connected Cars可防僵尸攻击 谷歌以32亿美金收购iPod之父的创业公司Nest 物联网时代来临 微软2014,有你期待的吗? 映趣科技发布inWatch Z/inWatch X 后者采用全彩透明柔性屏 程序员没有天才:暴风影音首席架构师鲍金龙访谈 开放式创新改变世界——OpenStack生态系统将重新洗牌 Java 8最终发布日期敲定,即使有bug也要发布 Meteor PK Django,谁更适合开发实时Web应用? 学编程就像选家具:去宜家还是从种树开始? 前车之鉴 十二个年度最差设计网站汇集 冷暖交替,2014年编程兴衰趋势预测 诺基亚出Android手机,微软或将受惠 苹果不收购Nest的大猜想 Netflix开源S3一致性提升利器S3mper Fi 《近匠》第06期:UCloud——目标!完整云服务 小三上位:Windows Phone不容忽视的契机 “详解Visual Studio 2013”全国巡讲北京站:无忧开发iOS及Android应用 Chrome最新版:快速静音及在Win8中建Chrome OS系统 雅虎COO Henrique de Castro因业绩不佳被解雇 分析比特币背后的数据算法,抢占背后巨大市场先机 美食菜谱将会成创业风口的两大理由 Windows XP杀毒软件更新 将被延至2015年7月 请教一个apache2.0加tomcat4.3.x时访问目录控制问题 那里有Zend的反编译软件下啊? 大家给我提建议拉,java项目该如何做?交友 这样的asp.net程序消耗是不是太高? 满分求救: 通过 scope="session" 定义的bean 我想继续在包含页中使用。。 大家给个名字建议吧 BDE问题 那个说我骗你手提电脑的进来!!!!!!! 谁知道啊? 直接写内存的Win32 API? 向高手请教.NET下怎样实现聊天室功能? 请教一个apache2.0加tomcat4.3.x时访问目录控制问题 关于JFC的问题 如何鼠标指到单元格中,把单元格中的文字颜色改变 小弟菜鸟,请教一个小问题 初学者问题:关于Serialize()用法 寻求好的解决方法 新手求助?谁有较好的打印控件,或较好的解次方案? 申请数据结构-算法版主 初学者问题:MFC数据库(ACCESS) 那里可以找到interbase7的全部文档? 初学者问题:MFC建立数据库连接 请帮我编个简单的VC++程序,速回复,谢谢 初学者问题:MFC(FORMVIEW) 在System.DirectoryServices中如何通过NT用户组来取得组中的用户 高分:在命令提示符中登录mysql并执行包含多个mysql脚本 新手求助!!!! C#中的控制问题,大家来看看 急,哭,IIS下无法调试ASP。555,高手求你们帮帮我吧。 映射网络驱动器错误,我在公司机子上可以用,而在自家电脑上却报错,为什么?在线等待 sos pb巨大一个bug(还是我太菜了?),帮忙呀,兄弟们! 传值调用~,编译通过,可执行时出错 serialize(CArchive& ar)中怎样加载数组? 如何用VC从c代码得到汇编的代码? 如何在<form runat=server>...</form>内调用form外定义的变量? 如何鼠标指到单元格中,把单元格中的文字颜色改变 555~~~~ 100分求together for JBuilder 下载(不知为啥我的IE到borland上竟然无法打开那个弹出的下载页面) 如何定义listview控件中的指定文字的颜色? 我是初学jsp的虾米!请大家来帮我! 关于子窗体向父窗体取值问题 大脑极度混乱后的想法,请大家分析一下可行吗? 冲击波,怎么办? 您好 , 请教如何写一个服务程序 ? 高分求救-----怎么读出excel中的数据? 打印机套打发票问题。。。 怎样读取INI文件?按格式遍历数据 关于我看到的CSDN中的舞弊情况 谁有<<LINUX核心源代码>>的光盘. 爱情森林(原爱情毒药) 一 求有关于java的非GUI输入(windows命令窗口输入输出) 某国家年初共有500万人 该年出生并成活婴儿4.85万人 死亡人口5.27万人 该国年度ren'人口自然增长率为多少计算 了 如某村的人口为1 500人,在一年内出生并成活45个婴儿,死亡 1 5人,正确的结论是 ( )A.该村的出生率为1名 B.该村的死亡率为3% C.该村的人口自然增长率为20%D.该村的人口自然增长率为2% 企鹅跑步是什么样子的?他们说我跑步想帝王企鹅...无语中 企鹅的眼泪是什么样子的 model:sets:yh/1,2,3/:;fq/1,2,3/:;link(yh,fq):x,d;link1(fq):w;endsetsmin=0.5*@sum(yh(i):d(i,j)-x(i,j))+0.3*@sum(yh(i):d(i,j)-x(i,j))+0.2*@sum(yh(i):d(i,j)-x(i,j));@for(yh(i):@sum(fq(j):x(i,j))=o);lingo最后的约束条件报错:index variables may fun和int fun 的区别 名著连线题求解?(2)5.请为下烈相对应的战役、战法连线.里应外合破童贯 车轮战打华州 十面埋伏败呼延灼 6.请为下列相对应的男女人物连线.宋江贾氏 张文远 武松潘巧云 西门庆 杨雄潘金 是什么字蔡启圣 曲终王子启圣人,臣父愿为唐外臣 意思初中 冰心 观舞记 康熙王朝中姚启圣在福建两个“回味无穷”什么意思 人口有500万,出生婴儿4.85万,死亡5.2万,自然人口增长率为? 韩媒:中国人在韩免税店消费额首超过韩美情报委员会主席:白宫已承诺停止监听日本称中国军机连续3天飞越宫古海峡实美一男子喝红牛饮料后死于心脏病 家人艺术家将住“蛋壳屋”内 旨在警示气候利比亚运钞车遭抢 劫匪抢走总计数千万男子将中国瓷器当垃圾尘封20年 拍出奥巴马以“不知情”回应窃听风波 政客美国军火巨头创新型侦察工具 可安放于青海民间手工艺展在曼谷拉开\"今日中英国海军借“小甜甜”歌曲“吓退”索马P2P网贷最新资讯:行业收益率的两极“美元霸权”步入衰落 人民币崛起时代市场反弹进入尾声 下一步怎么操作?巴菲特和博格尔的头等投资秘籍竟然是不重拳出击,新主席打响第一枪3月22,今日现货铜行情点评之尘埃落第一次被人追求是什么感觉?一元发官网启用三声母yyf.com女生发起火来,最夸张是什么样?【国道移民】为什么选择移民澳大利亚?今天,我们来聊聊旅行中床上那些事儿 超级娱乐王朝洪荒之人族有圣神道符召美女的近身高手雄宋异界全职业剑圣无极药尊重生之商界霸主永生天帝全职无双落日山河辛亥革命武昌起义纪念馆旅游吉庆街旅游江滩公园旅游晴川阁旅游西津渡旅游镇江博物馆旅游镇江甘露寺旅游北固山旅游金山寺旅游老虎滩海洋公园旅游钟鼓楼旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘