基于MFC的系统加速器的设计与实现

2023-06-15 05:26曾昱旗黄丽韶
无线互联科技 2023年2期

曾昱旗 黄丽韶

摘要:为了提高操作系统的性能,文章提出了一个基于 MFC 的系统加速器。系统加速器使用 C++ 语言开发,在 Windows 7 以上和 VS2015 开发环境下进行。其主要技术包括窗体标题栏重绘,MFC 界面开发,垃圾清理,TabControl 面板控件的使用,遍历文件和调用系统功能等。实测结果表明,使用该系统加速器可以让操作系统运行更加流畅,不仅占用的控件更小,而且还可以管理一些常用的系统功能。

关键词:MFC;系统加速器;操作系统;垃圾清理

中图分类号:TN711  文献标志码:A

1 背景及意义

随着互联网和硬件技术的飞速发展,Windows操作系统的功能越来越强,操作越来越简单[1]。可是随着大型软件的使用,系统的运行速度也越来越慢[2]。就目前最流行的 Windows 10而言,很多人尝试了各种办法来加速运行时间,使用各种优化技巧或者软件加速启动过程[3-4]。系统加速器就是典型的软件加速启动过程。其主要特点:支持优化性能,关闭后台应用程序和清理临时内存后提高运用速度;支持卸载不需要/不常用的应用程序,释放内存和系统资源;支持在主界面中或通过窗口小部件一键优化系统速度;支持优化内存,清理应用程序缓存和内存数据。本文在此背景下设计开发了一款系统加速器以提高系统的运行效率。

2 系统功能设计

2.1 开发细节

本文设计的系统加速器的开发细节如图1所示。

2.2 系统功能结构

一般情况下系统的总功能可分解为若干分功能,

图1 系统加速器相关开发细节各分功能又可进一步分解为若干二级分功能,如此继续,直至各分功能被分解为功能单元为止。这种由分功能或功能单元按照其逻辑关系连成的结构称为功能结构。分功能或功能单元的相互关系可以用图来描述,表达分功能或功能单元相互关系或从属关系的图称为功能结构图。本设计的系统加速器的功能结构,如图2所示。

2.3 系统开发环境要求

开发系统加速器之前,本地计算机需要满足以下条件:开发环境为Visual Studio 2015免费社区版;开发语言为C++,MFC和Win32API;开发环境运行平台为Windows7(SP1)以上。

3 关键技术

3.1 自繪标题栏

为了使模块更美观,本文通过窗口设备上下文重新绘制了窗体标题栏,使窗体的标题栏和重绘的位图背景可以更好地搭配在一起。重绘窗体标题栏的步骤如下:

(1)设置对话框属性。打开对话框资源的属性窗口,勾选相关属性,使对话框具有标题栏,去掉相关属性,在对话框标题栏中不显示关闭按钮。

(2)在对话框头文件中声明常量和变量,再定义一个枚举类型来保存按钮状态,并在对话框的构造函数中初始化变量。

(3)添加自定义函数DrawCaption(),使用该函数绘制窗体标题文本。添加自定义函数DrawDialog(),该函数用于绘制窗体标题栏以及标题栏按钮。

(4)处理对话框消息。在消息的处理函数中绘制工具栏按钮。当鼠标移动到标题栏按钮上时,绘制标题栏按钮的热点效果;在鼠标离开标题栏按钮时,恢复标题栏按钮原来的效果。

(5)处理对话框的消息。在消息的处理函数中重绘标题栏,再次处理对话框的消息,在消息的处理函数中相应标题栏按钮的鼠标单击事件。

(6)处理对话框的非客户区激活消息。在消息表示“窗口的非客户区被激活”,在消息的处理函数中重绘窗口。

(7)在对话框的方法中调用DrawDialog函数绘制标题栏。核心代码如下:

Void CSysOptimizeDlg::OnPaint()

{

DrawDialog(fAll);

m_IsDrawForm = TRUE;

}

在标题栏自绘的设计中,只包含标题栏的名称、右上角的最大/最小按钮和关闭按钮,并没有采用位图作为背景。因此,本文的设计不会降低标题栏的加载速度,更不会增加系统的负担。

3.2 获取任务列表和正在运行的进程

在系统任务管理模块中需要显示当前正在运行的任务列表。本文主要通过遍历当前所有窗口,判断窗口是否为顶层窗口,如果为顶层窗口则表示为应用程序的主窗口,将其添加到列表框中。可以通过API的相关函数获取窗口句柄。在系统任务管理模块的进程选项卡中,需要显示当前正在运行的所有进程,可以通过相关函数对当前系统中进程生成快照。

获取任务列表必须明确当前窗口与句柄窗口之间的关系,尤其要指明兄弟窗口的第一个、最后一个、上一个还是下一个窗口。设计获取正在运行的进程时,需要将快照句柄进行继承,指定进程堆列表、进程模块列表的快照及进程的ID值。

3.3 清空操作

在磁盘空间整理模块中,用户可以选择清空系统回收站以释放磁盘空间,通过相关函数来实现清空回收站的功能。其核心代码如下:

SHSTDAPI SHEmptyRecycleBin(HWND hwnd, LPCTSTR pszRootPath, DWORD dwFlags)。

在“开始”菜单中的“运行”菜单项中,保存着最近执行过运行命令的历史记录,可以通过修改注册表实现在推出Windows系统时清除“运行”菜单项中的历史记录。需要修改的注册表项,在注册表项下建立一个二进制键值,设置其值为“01 00 00 00”。

在磁盘空间整理模块中,包含清空IE历史记录选项,用户可以选择清空IE历史记录。注册表项存储中10条浏览过的网址信息,可以通过相关函数删除该注册表项来清空上网历史记录。

在此清空操作设计中,最开始仅使用文件遍历,其执行效率上远远达不到要求,但在加上多线程后,清空操作速度有显著提高。

3.4 调用控制面板工具

在控制面板操作模块中,用户可以调用常用的控制面板工具,要实现这个功能,可以使用相关函数实现。核心代码如下:

void CContralDlg::OnButinternet()

{

::ShellExecute(NULL, “OPEN”, “rundll32.exe”, “shell32.dll Control_RunDLL inetcpl.cpl”, NULL,SW_SHOW);

}

在调用控制面板相关设置对话框时,主要执行rundll32.exe程序。例如,打开IE设置窗口,可以选择开始/运行菜单命令,在“打开”文本框中输入shell语句完成控制面板的调用。

3.5 主窗体设计

3.5.1 绘制主窗口背景图片

初始的对话框窗口背景为灰色,其实现原理是系统自动提供一个默认画刷,每次绘画时使用这个灰色的画刷。如果想改变这个背景,只需要替换画刷。具体实现步骤如下:添加相关消息处理函数,在该消息的处理函数中,绘制主窗体的背景位图并设置静态文本控件透明显示。

3.5.2 主窗体界面预览与布局

在系统优化模块的主窗体中,包含调用各子模块的导航按钮,用户可以方便地使用模块进行操作。系统优化模块主窗体的界面设计过程如下:创建一个基于对话框的应用程序;向工程中导入位图资源,修改位图ID;向对话框中添加控件,包括2个图片控件和4个静态文本控件。

3.5.3 实现子窗口切换功能

本程序的主要功能集中在4个子窗口中,主窗口左下方有4个图片按钮,点击不同的图片出现相应的子窗口,再通过子窗口选择相关功能。子窗口切换的实现步骤如下:(1)在主窗体的头文件中声明调用的各个模块对象;(2)在主窗口的相关方法中创建系统任务管理模块,并获取工具栏按钮位图的大小;(3)添加自定义函数用于显示相应的模块;(4)添加自定义函数用于销毁各个模块;(5)处理“控制面板操作”静态文本控件的单击事件,在该事件的处理函数中调用控制面板操作模块,并设置选中效果;(6)添加主窗体的相关消息处理函数,在消息的处理函数中关闭当前显示的模块,退出程序。在此子窗口切换功能的设计中,图片点击事件处理和子窗口的创建与销毁都是通过调用MFC中相应的函数实现。

3.6 磁盘空间整理模块

在磁盘空间整理模块中,用户可以选择要清除的项目,包括“清空回收站”“清空临时文件”等项目,再单击“清理”按钮进行清除。磁盘空间整理模块的功能实现过程如下:(1)在磁盘空间整理模块的相关方法中,设置列表视图控件的风格和列标题,并向列表中插入数据,设置控件字体;(2)处理复选框的单击事件,在该事件的处理函数中设置复选框全选或全不选;(3)添加自定义函数,用于清理用户选中的项目;(4)添加相关函数用于递归删除文件。

最初设计磁盘空间整理部分时,采用循环方法,整理效率较低。经过不断调试,采用递归方法后,效率明显提高。整理时,还须注意采用删除、替换的方式进行,这是本文设计的系统加速器的优势所在。

3.7 垃圾文件清理模块

在垃圾文件清理模块中,用户可以选择要清除的垃圾文件磁盘,并通过“选项”按钮设置垃圾文件类型,单击“开始”按钮执行清理垃圾文件的操作。清理的文件将显示在列表中,单击“停止”按钮可以停止清理垃圾文件的操作。垃圾文件清理模块的功能实现过程如下:(1)在垃圾文件清理模块的相关方法中获取系统驱动器盘符并将盘符插入到组合框中;(2)添加自定义函数用于删除指定磁盘的垃圾文件;(3)添加自定义函数用于递归删除垃圾文件;(4)处理“开始”按钮的单击事件,调用线程函数清理垃圾文件;(5)处理“停止”按钮的单击事件,终止线程。

在垃圾文件清理的设计中,对话框控件包括:1个静态文本控件、1个列表框控件、1个组合框控件和3个按钮控件。每个控件要注意关联相关的变量,比如组合框控件关联组合变量。

3.8 系统任务管理模块

系统任务管理模块中包含一个选项卡,用户可以选择查看当前运行的程序或进程,选择“窗口”选项卡则显示当前运行程序,选择“进程”选项卡则显示正在运行的进程。系统任务管理模块的实现过程如下:在系统任务管理模塊的相关方法中,设置标签页和列表视图控件的属性;添加自定义函数用来设置列表视图控件的显示内容;处理标签控件的TCN_SELCHANGE事件,在该事件的处理函数中调用相关函数设置列表显示内容。

此过程的设计包括进程和窗口的遍历及进程的打开与结束。特别注意,设计时要及时获取进程ID、线程数量和优先级别。本文在设计时,多次调试了加载动态库过程。加载动态库要注意,在遍历窗口时,只有在窗口非空时才存放到列表中。若没有对窗口是否为空进行判断,则会降低系统效率。

4 结语

本文详细阐述一个系统加速器的设计与实现。该系统加速器包含主界面、控制面板操作、磁盘空间整理、垃圾文件清理和系统任务管理模块。通过该系统加速器可以释放关键的CPU资源,找出拖慢系统速度的元凶,优化设备运行速度。经过测试,该加速器具备以下特点:(1)可清理所有浏览器,搜索历史、地图数据历史、gmail历史、本文信息、视频、图片信息、通话记录、谷歌市场历史等;(2)可结束所有应用程序进程;(3)可清理所有残留垃圾文件;(4)可提高内存运用空间;(5)可清理应用程序、所有缓存,优化空间和恢复内存速度;(6)可删除应用程序。

参考文献

[1]宋鹤鸣.智能语音系统加速器设计[D].上海:上海交通大学,2019.

[2]向隆.基于CPU-GPU系統加速精准内积检索[D].哈尔滨:哈尔滨工业大学,2019.

[3]沈国新,张德学,王桂海,等.一种实时操作系统硬件加速设计[J].微型机与应用,2010(6):17-19.

[4]陈程,张磊,杨静远.嵌入式操作系统初始化代码执行提速方法[J].信息技术与信息化,2021(7):87-89.

(编辑 姚 鑫)

Design and implementation of system accelerator based on MFC

Zeng  Yuqi, Huang  Lishao

(College of Information Engineering, Hunan University of Science and Engineering, Yongzhou 425199, China)

Abstract: In order to improve the performance of operating system, a system accelerator based on MFC is designed and implemented in this paper. The system accelerator uses C++ language for development, Windows7 and VS2015 as the development environment, mainly used technology including form title bar redraw, MFC interface development, garbage cleaning, TabControl panel control use, traversing files and call system functions. Finally through the test, using the system accelerator can make the operating system run more smoothly, occupy smaller controls, but also can manage some common functions of the system.

Key words: MFC; system accelerator; operating system; cleaning