进程管理器课程设计报告.docx
- 文档编号:27886439
- 上传时间:2023-07-06
- 格式:DOCX
- 页数:32
- 大小:194.12KB
进程管理器课程设计报告.docx
《进程管理器课程设计报告.docx》由会员分享,可在线阅读,更多相关《进程管理器课程设计报告.docx(32页珍藏版)》请在冰豆网上搜索。
进程管理器课程设计报告
进程管理器
课程设计
题目:
进程管理器
姓名
一、需求与功能分析
我们的电脑需要我们去了解它的运行状况,掌握和管理它的进程,并对其异常情况给予操作和控制,进程管理器就像是我们了解和控制自己电脑运作的一个窗口,通过这个窗口我们可以了解到电脑所有进程运行状况,并对运行的进程加于管理和控制,正如在本实验中,启动进程管理器后,可以通过”获取进程”功能来获得本计算机启动的进程,以及与该进程相关的信息,其中包括的信息有:
进程映像名称,进程开启的线程数,进程的PID以及进程的优先数,我们可以通过这些信息来了解计算机中每个进程的使用状况。
同时我们可以在进程管理器上选中一个要终止的的进程,点击“终止进程”功能按钮,该进程被终止执行并退出进程列表,其中还包括了自动刷新的功能,此按钮实现的功能正如我们电脑任务管理器的“进程”功能,当电脑执行程序不能通过关闭窗口进行正常的关闭时,可以借助此办法来关闭进程。
我们还可以通过这个进程管理器来启动新的进程,当我们要在进程管理器里启动新的进程时,只要点击“启动新进程”按键,则会弹出“打开进程”对话框,我们可以通过对话框里的“浏览”窗口选择要打开的新进程,这是任务管理器里没有实现的功能,通过这个功能我们在管理计算机时变得更加灵活方便,也使进程管理的功能更加完善。
在退出此进程管理器时候,只要选择“退出”功能按钮则可关闭进程管理器,快速退出管理器的界面。
本管理器设计比较简洁,操作灵活,使用简单,可以为我们管理和控制计算机的进程提供了一个简便的方法,是我们控制本计算机进程和了解计算机进程情况的良好助手。
二、系统总体框架
2.1系统框架图
本系统设计比较简洁,用MFC来做界面,实现了四个功能,显示四类与进程相关的信息,具体的总体框架图如图1所示:
获取进程
进程管理器界面
启动新进程
终止进程
退出
进程映像名称
进程开启的线程数
优先数
PID
打开新进程
选择要终止的进程
图1总体框架图
2.2各功能模块的详细说明
本系统实现了四大功能,分别包括了:
获取进程、启动新进程、终止进程和退出管理器,各功能模块的详细说明如下:
(1)获取进程。
点击获取进程后,它能自动获取计算机的所有进程,并显示进程的相关信息,其中包括的信息有:
进程映像名称,进程开启的线程数,进程的PID以及进程的优先数,通过这一功能,我们能了解进程的相关情况。
(2)启动新进程。
点击“启动新进程”按钮,进入“打开进程”对话框,在“浏览”窗口里选择任意一个应用程序,则能在管理器里直接启动我们所选的进程。
(3)终止进程。
当我们遇到某些软件在关闭窗口时不能直接关闭,这时可以在进程管理器的“终止进程”里找到该进程并将其终止,这一功能实现的是类似于任务管理器的“进程”选项所具有的功能。
(4)退出管理器。
当对管理器操作做完毕时,直接点击“退出管理器“按钮则可关闭管理器。
三、模块设计与分析
本软件实现了进程管理的三大功能,其中主要用到了三大函数,包括获取进程函数“OnGetProcess”、启动新进程函数“Ononrun”、终止进程函数“OnStopProcess”以及退出管理器函数“OnBnClickedCancel”,以下是对每个程序的详细设计:
3.1获取进程模块
该模块使用到的控件如表1:
表1实现获取进程功能使用的控件表
控件
名称
控件
类型
标题
变量
作用
说明
变量名
类型
IDOK
PushButton
获取进程
m_show
CSXButton
获取计算
机的进程
IDC_LIST_SHOW
ListControl
-
m_showlist
CListCtrl
显示所获
得的进程
在IDOK控件上建立事件OnGetProcess(),当用户点击“获取进程”按扭时事件发生,进程管理器可以获取计算机的所有进程。
函数源代码如下:
voidCShowAllProcessDlg:
:
OnGetProcess()//获取进程的消息处理函数
{
//TODO:
Addyourcontrolnotificationhandlercodehere
HANDLESnapshot;
Snapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);//获得某一时刻系统的进程、堆(heap)、模块(module)或线程的快照信息
PROCESSENTRY32processListStr;//获得进程的信息
processListStr.dwSize=sizeof(PROCESSENTRY32);
BOOLreturn_value;
return_value=Process32First(Snapshot,&processListStr);
//获得系统进程链表中第一个进程的信息
m_showlist.DeleteAllItems();
inti=0;//itemindex
while(return_value)
{
m_showlist.InsertItem(i,processListStr.szExeFile,0);//插入第一项,从零开始插入
CStrings;
s.Format("%d",processListStThreads);//输出线程
m_showlist.SetItemText(i,1,s);
s.Format("%d",processListStr.th32ParentProcessID);//输出ID
m_showlist.SetItemText(i,2,s);
s.Format("%d",processListStr.pcPriClassBase);//输出优先数
m_showlist.SetItemText(i,3,s);
intmemory=processListStThreads;//写入内存
m_ProcessIndex[i]=processListStr.th32ProcessID;//saveIDintoarraytoteminate
return_value=Process32Next(Snapshot,&processListStr);
//获得系统进程链表中下一个进程的信息
i++;
}
}
功能实现的流程图如图2所示:
开始
获取进程、堆、模块的快照信息
获取下一
进程信息息
结束
Y
获取进程第一个进程的信息
N
图2获取进程流程图
3.2启动新进程模块
该模块使用到的控件情况如表2:
表2实现启动新进程功能使用的控件表
控件
名称
控件
类型
标题
变量
作用
说明
变量名
类型
IDC_onrun
PushButton
启动新进程
m_run
CSXButton
启动新的进程
IDC_LIST_SHOW
ListControl
-
m_showlist
CListCtrl
显示所获得的进程
在IDC_onrun控件上建立事件Ononrun(),当用户点击“启动新进程”按钮时事件发生,此可以通过“打开进程”对话框,选择一个应用程序让其执行。
函数源代码如下:
voidCShowAllProcessDlg:
:
Ononrun()//启动新进程的消息处理函数
{
//TODO:
Addyourcontrolnotificationhandlercodehere
//加载动态链接库
CStringpszDllName="shell32.dll";
HINSTANCEhLib=:
:
LoadLibrary(pszDllName);//定义一个句柄,获取的dll文件,是相对路径,和.exe文件在同一个目录下
typedefvoid(__stdcall*pRunFileDlg)(HWND,HICON,LPCTSTR,LPCTSTR,LPCTSTR,UINT);
pRunFileDlgRunFileDlg;
if(hLib==NULL)//若hLib为空,加载失败,hLib不为空,加载成功
{
return;
}
RunFileDlg=(pRunFileDlg)GetProcAddress(hLib,(char*)61);
CStringname="打开进程";
CStringsss="请输入程序,文件夹,文档或其它东西。
";
LPWSTRwname=newWCHAR[100];
LPWSTRwsss=newWCHAR[100];
memset(wname,0,sizeof(WCHAR)*100);
memset(wsss,0,sizeof(WCHAR)*100);
MultiByteToWideChar//多字节字符到宽字符转换函数
(CP_ACP,//ANSI转换时所用的代码页
MB_PRECOMPOSED,//character-typeoptions
name,//addressofstringtomap
name.GetLength(),//numberofbytesinstring
wname,//addressofwide-characterbuffer
100
);
MultiByteToWideChar//多字节字符到宽字符转换函数
(CP_ACP,//ANSI转换时所用的代码页
MB_PRECOMPOSED,//character-typeoptions
sss,//addressofstringtomap
sss.GetLength(),//numberofbytesinstring
wsss,//addressofwide-characterbuffer
100
);
if(RunFileDlg!
=NULL)
{
RunFileDlg(this->GetSafeHwnd(),NULL,NULL,(LPCTSTR)wname,(LPCTSTR)wsss,0x02);
}
:
:
FreeLibrary(hLib);//函数运行完毕后,卸载dll文件
}
功能实现的流程图如图3所示:
打开进程
选择要启动的程序
hLib是否为空
加载文件
函数运行完毕,
卸载dll文件
N
结束
Y
图3启动新进程流程图
3.3终止进程模块
该模块使用到的控件情况表如表1:
表1实现终止进程功能使用的控件表
控件
名称
控件
类型
标题
变量
作用
说明
变量名
类型
IDC_STOP
PushButton
终止进程
m_stop
CSXButton
终止选中的进程
IDC_LIST_SHOW
ListControl
-
m_showlist
CListCtrl
显示所有进程
在IDC_STOP控件上建立事件OnStopProcess(),当用户选中其中一个进程,并点击“终止进程”按扭时事件发生,所选中的进程被终止,进程列表被更新。
函数源代码如下:
voidCShowAllProcessDlg:
:
OnStopProcess()//终止进程的消息处理
{
//TODO:
Addyourcontrolnotificationhandlercodehere
POSITIONpos=m_showlist.GetFirstSelectedItemPosition();//要选择的进程所处的位置
intcurrentSelect=m_showlist.GetNextSelectedItem(pos);//当前选中的行
if(currentSelect>0)
{
//选择某项
CStringFileBuffer;//获得进程的可执行文件的文件名
FileBuffer=CString(TEXT("确实要终止进程")+m_showlist.GetItemText(currentSelect,0)+TEXT("?
"));
if(AfxMessageBox(FileBuffer,MB_OKCANCEL,0)==IDOK)
{//先获得该进程句柄,通过进程标识
HANDLEProcessHandle;
ProcessHandle=OpenProcess(PROCESS_ALL_ACCESS,FALSE,m_ProcessIndex[currentSelect]);//利用数组ID指定的获得存在的一个进程的句柄
if(ProcessHandle)
{TerminateProcess(ProcessHandle,0);//使指定进程结束
AfxMessageBox("指定进程已终止!
");
OnGetProcess();//刷新显示
}
else
{AfxMessageBox("系统不允许终止指定进程!
");}
}
}
else
{AfxMessageBox("请先选择一个需要终止的进程!
",MB_OK);
}
}
功能实现的流程图如图4所示:
开始
有进程吗?
指定进程已终止
刷新
Y
选择要终止的进程名
系统允许终止该进程
Y
N
结束
图4终止进程流程图图
3.4退出模块
该模块使用到的控件情况表如表1:
表1退出功能实现使用控件情况表
控件
名称
控件
类型
标题
变量
作用
说明
变量名
类型
IDCANCEL
PushButton
退出
m_exit
CSXButton
退出进程管理器
IDC_LIST_SHOW
ListControl
-
m_showlist
CListCtrl
显示所有进程
在IIDCANCEL控件上建立事件OnBnClickedCancel(),“退出”按钮响应函数,退出进程管理器。
函数源代码如下:
voidCShowAllProcessDlg:
:
OnBnClickedCancel()//断开该连接"按钮的响应函数
{IDCANCEL
//TODO:
在此添加控件通知处理程序代码
OnCancel();
}
四、类的设计与分析
4.1、CShowAllProcessApp类
以CwinApp为基类创建CShowAllProcessApp子类,它是应用程序的入口和出口,在这里处理一些启动和退出程序时需要读取或写入的设置信息,以及设置一些全局变量。
CShowAllProcessApp类的定义如下:
classCShowAllProcessApp:
publicCwinApp//函数头文件中的应用程序,
public:
CShowAllProcessApp();//整个程序中的应用程序
//Overrides
//ClassWizardgeneratedvirtualfunctionoverrides
//{{AFX_VIRTUAL(CShowAllProcessApp)
public:
virtualBOOLInitInstance();
//}}AFX_VIRTUAL
//Implementation
//{{AFX_MSG(CShowAllProcessApp)
//NOTE-theClassWizardwilladdandremovememberfunctionshere.
//DONOTEDITwhatyouseeintheseblocksofgeneratedcode!
//}}AFX_MSG
};
//用户程序中的每个CCmdTarget派生类必须提供消息映射以处理消息,用这个函数了来处理用户消息
DECLARE_MESSAGE_MAP()
4.2CaboutDlg类
以CDialog为基类创建CAboutDlg类,CAboutDlg 由CDialog派生而来,用来处理进程管理器的主窗口。
CLockfileDlg类的定义如下:
classCAboutDlg:
publicCDialog
{
public:
CAboutDlg();
//DialogData
//{{AFX_DATA(CAboutDlg)
enum{IDD=IDD_ABOUTBOX};//公有类型
//}}AFX_DATA
//ClassWizardgeneratedvirtualfunctionoverrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);//数据更新
//}}AFX_VIRTUAL
//Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()//
};
4.3、CshowAllProcessDlg类
以CDialog为基类创建CShowAllProcessDlg子类。
CLockfileDlg类的定义如下:
classCShowAllProcessDlg:
publicCDialog
{
//Construction
public:
DWORDm_ProcessIndex[50];//存放所有进程的ID
CShowAllProcessDlg(CWnd*pParent=NULL);//standardconstructor
//DialogData
//{{AFX_DATA(CShowAllProcessDlg)
enum{IDD=IDD_SHOWALLPROCESS_DIALOG};
CListCtrlm_showlist;
CSXButtonm_show;
CSXButtonm_exit;
CSXButtonm_stop;
//}}AFX_DATA
//ClassWizardgeneratedvirtualfunctionoverrides
//{{AFX_VIRTUAL(CShowAllProcessDlg)
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport
//}}AFX_VIRTUAL
//Implementation
protected:
HICONm_hIcon;
//Generatedmessagemapfunctions
//{{AFX_MSG(CShowAllProcessDlg)
virtualBOOLOnInitDialog();
afx_msgvoidOnSysCommand(UINTnID,LPARAMlParam);
afx_msgvoidOnPaint();
afx_msgHCURSOROnQueryDragIcon();
afx_msgvoidOnGetProcess();
afx_msgvoidOnStopProcess();
afx_msgvoidOnstartBUTTON();
afx_msgvoidOnonrun();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
public:
afx_msgvoidOnBnClickedCancel();
public:
afx_msgvoidOnLvnItemchangedListShow(NMHDR*pNMHDR,LRESULT*pResult);
};
4.4、CSXButton类
以CButton为基类创建CSXButton类,CSXButton 由CButton派生而来,用于创建控制的按钮,用于界面的美化。
CSXButton类的定义如下:
classCSXButton:
publicCButton
{
//Construction
public:
CSXButton();
//Attributes
private:
//Positioning
BOOLm_bUseOffset;
CPointm_pointImage;
CPointm_pointText;
intm_nImageOffsetFromBorder;
intm_nTextOffsetFromImage;
//Image
HICONm_hIcon;
HBITMAPm_hBitmap;
HBITMAPm_hBitmapDisabled;
intm_nImageWidth,m_nImageHeight;
//ColorTab
charm_bColorTab;
COLORREFm_crColorTab;
//State
BOOLm_bDefault;
UINTm_nOldAction;
UINTm_nOldState;
//Operations
public:
//Positioning
intSetImageOffset(intnPixels);
intSetTextOffset(intnPixels);
CPointSetImagePos(CPointp);
CPointSetTextPos(CPointp);
//Image
BOOLSetIcon(UINTnID,intnWidth,intnHeight);
BOOLSetBitmap(UINTnID,intnWidth,intnHeight);
BOOLSetMaskedBitmap(UINTnID,intnWidth,intnHeight,COLORREFcrTransparentMask);
BOOLHasImage();
//ColorTab
voidSetColorTab(COLORREFcrTab);
//State
BOOLSetDefaultButton(BOOLbState=TRUE);
private:
BOOLSetBitmapCommon(UINTnID,intnWidth,intnHeight,COLORREFcrTransparentMask,BOOLbUseMask);
void
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 进程 管理器 课程设计 报告