中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Visual C++ > 系统
《系统飞狐》系列软件中的“系统监视器”开发详解
作者:未知 时间:2005-07-20 14:20 出处:VC知识库 责编:chinaitpower
              摘要:《系统飞狐》系列软件中的“系统监视器”开发详解
一个操作系统性能监视器的开发

《系统飞狐》系列软件中的“系统监视器”开发详解

华北电力大学(保定) 程锋章

下载源代码

  自2001年开发系统飞狐系列软件以来,系统飞狐软件只进行过三次升级,现在由于要做毕业设计,更加没有时间来对整个软件,现把整个系统中一个软件——“系统监视器”的源代码拿出来共享,恳请大家指正,希望大家一起把它做得更好.该系统目前支持只支持Window9x,开发平台为VC++6.0,软件界面如图一所示,熟悉windows操作系统的朋友们都知道注册表在windows操作系统中核心地位,系统的许多设置和操作都保存在注册表中,比如添加删除功能、系统的所有设置(桌面、图标、系统文件夹,系统自动运行程序等等)都可以在注册表中找到相应的值,修改这些东西都会对操作系统产生重大的影响,详情可以参照系统飞狐软件
  系统监视器能监视系统采用实时的曲线记录当前操作系统的CPU使用率、核心线程个数、磁盘的高速缓存、内存的大小及使用情况,通过实时的曲线变化反应当前系统的运行特征,这在当前的系统优化设置软件中并不多见!


图一. 软件界面

  软件主要是根据注册表中"HKEY_DYN_DATA, PerfStats"下面的值的实时的变化获得当前系统的各种特征值,通过VC++定时器对采集这些数据处理后得到当前的变化值。系统的各种主要的参数相对应在注册表中的值如下面的代码所示,不一一详细解说。以CPU使用率和线程的个数的监视原理作为例子跟大家解说一下基本原理,这里用到了比较多的Wins32 API函数.

DWORD dwDataSize; 
DWORD dwType;
// starting the counter
if ( RegOpenKeyEx( HKEY_DYN_DATA, 
                   "PerfStats\\StartStat", 
                   0,
                   KEY_ALL_ACCESS, 
                   &hkey ) != ERROR_SUCCESS
                  )
return FALSE; 

//CPU使用率的获得 
dwDataSize=sizeof(DWORD); 
RegQueryValueEx( hkey, 
                 "KERNEL\\CPUUsage", 
                 NULL,&dwType, 
                 (LPBYTE)&dwCpuUsage, 
                 &dwDataSize ); 
RegCloseKey(hkey); 

//线程个数的获得 
RegQueryValueEx( hkey, 
                 "KERNEL\\Threads", 
                 NULL,
                 &dwType, 
                 (LPBYTE)&dwThreadUsage, 
                 &dwDataSize );
RegCloseKey(hkey); 

// geting current counter''s value
if ( RegOpenKeyEx( HKEY_DYN_DATA, "PerfStats\\StatData", 0,KEY_READ, &hkey ) != ERROR_SUCCESS)
return FALSE;

dwDataSize=sizeof(DWORD); 
RegQueryValueEx( hkey, 
                "KERNEL\\CPUUsage", 
                NULL,
                &dwType, 
                (LPBYTE)&dwCpuUsage, 
                &dwDataSize );//CPU的获得 
                
RegQueryValueEx( hkey, 
                 "KERNEL\\Threads", 
                 NULL,&dwType, 
                 (LPBYTE)&dwThreadUsage, 
                 &dwDataSize );
//线程的获得 SetTimer(1,500,NULL); //定时器              
  绘制实时曲线描述当前状态,在OnTimer函数和OnPaint中编制如下代码来求得实时的值然后绘制曲线:
void CCpuPage::OnTimer(UINT nIDEvent) 
{
	DWORD dwDataSize;
	DWORD dwType;
	dwDataSize=sizeof(DWORD); 
	RegQueryValueEx( hkey,
	                 "KERNEL\\CPUUsage", 
	                 NULL,
	                 &dwType, 
	                 (LPBYTE)&dwCpuUsage,
	                 &dwDataSize ); //CPU 的获得
	                 
	RegQueryValueEx( hkey,
	                "KERNEL\\Threads", 
	                NULL,
	                &dwType, 
	                (LPBYTE)&dwThreadUsage,
	                &dwDataSize );//线程的获得
	                
	UpdateData(FALSE);
	Invalidate(FALSE);
	CPropertyPage::OnTimer(nIDEvent);
}

void CCpuPage::OnPaint() 
{ CPaintDC dc(this); // device context for painting

for( i=0; i<50;i++)//画历史图
{
	m_CPUData[i]=m_CPUData[i+1];//历史值
}
m_CPUData[49]=n*3;

dc.MoveTo(146,94-m_CPUData[0]);绘制曲线
for( i=1; i<50;i++)
{
	dc.LineTo(146+4.7*i,94-m_CPUData[i]/1.2);
	dc.SelectObject(pOldPen); 
}


图二 图形界面

结束语
  系统监视器的核心主要是通过对注册表的操作进行系统的检测,上面的介绍清楚的说明了注册表记录操作系统的各种运行参数,我们要做的就是找到这些参数对应的注册表值,然后根据对这些值的变化来得到当前的系统状态,由于作者时间有限,没有对软件的使用平台进行扩展目前只支持Win9x操作系统,相信经过大家的努力能把它完善!如有任何问题请到作者的VC++资源中心上反应,由于邮件过多无法保证一一回复,另外作者水平有限,请大家多多指正!

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有