Windows下的进程管理和监控器.docx

上传人:b****1 文档编号:100526 上传时间:2023-04-28 格式:DOCX 页数:39 大小:1.02MB
下载 相关 举报
Windows下的进程管理和监控器.docx_第1页
第1页 / 共39页
Windows下的进程管理和监控器.docx_第2页
第2页 / 共39页
Windows下的进程管理和监控器.docx_第3页
第3页 / 共39页
Windows下的进程管理和监控器.docx_第4页
第4页 / 共39页
Windows下的进程管理和监控器.docx_第5页
第5页 / 共39页
Windows下的进程管理和监控器.docx_第6页
第6页 / 共39页
Windows下的进程管理和监控器.docx_第7页
第7页 / 共39页
Windows下的进程管理和监控器.docx_第8页
第8页 / 共39页
Windows下的进程管理和监控器.docx_第9页
第9页 / 共39页
Windows下的进程管理和监控器.docx_第10页
第10页 / 共39页
Windows下的进程管理和监控器.docx_第11页
第11页 / 共39页
Windows下的进程管理和监控器.docx_第12页
第12页 / 共39页
Windows下的进程管理和监控器.docx_第13页
第13页 / 共39页
Windows下的进程管理和监控器.docx_第14页
第14页 / 共39页
Windows下的进程管理和监控器.docx_第15页
第15页 / 共39页
Windows下的进程管理和监控器.docx_第16页
第16页 / 共39页
Windows下的进程管理和监控器.docx_第17页
第17页 / 共39页
Windows下的进程管理和监控器.docx_第18页
第18页 / 共39页
Windows下的进程管理和监控器.docx_第19页
第19页 / 共39页
Windows下的进程管理和监控器.docx_第20页
第20页 / 共39页
亲,该文档总共39页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Windows下的进程管理和监控器.docx

《Windows下的进程管理和监控器.docx》由会员分享,可在线阅读,更多相关《Windows下的进程管理和监控器.docx(39页珍藏版)》请在冰点文库上搜索。

Windows下的进程管理和监控器.docx

Windows下的进程管理和监控器

操作系统安全课程设计报告

Windows下的进程管理和监控器

 

目录

操作系统安全课程设计报告0

一、概述2

1.设计主要完成的任务2

2.解决的主要问题2

二、设计的基本概念和原理2

1.概念2

2.原理2

三、总体设计3

1.功能模块3

2.流程图3

四、详细设计4

主要功能的代码实现:

4

五、完成的情况以及使用说明22

六、总结33

七、参考文献33

 

一、概述

1.设计主要完成的任务

设计一个Windows或Linux下的进程管理与监控程序,要求该程序完成以下功能:

(1)可获取当前正在运行的所有进程,包括进程PID、进程名称、CPU使用情况、当前用户名、内存占用量等;

(2)能进一步获取各进程的所有线程情况;

(3)能通过命令终止某个进程的执行,终止时能将其子孙进程全部终止;

(4)要求界面友好。

2.解决的主要问题

我们的电脑需要我们去了解它的运行状况,掌握和管理它的进程,并对其异常情况给予操作和控制,任务管理器就像是我们了解和控制自己电脑运作的一个窗口,通过这个窗口我们可以了解到电脑所有进程运行状况,并对运行的进程加于管理和控制。

本管理器设计比较简洁,操作灵活,使用简单,可以为我们管理和控制计算机的进程提供了一个简便的方法,是我们控制本计算机进程和了解计算机进程情况的良好助手。

二、设计的基本概念和原理

1.概念

在本实验中,启动进程管理器后,可以通过”获取进程”功能来获得本计算机启动的进程,以及与该进程相关的信息,其中包括的信息有:

进程映像名称,进程开启的线程数,进程的PID以及进程的优先数,我们可以通过这些信息来了解计算机中每个进程的使用状况。

同时我们可以在进程管理器上选中一个要终止的的进程,点击“终止进程”功能按钮,该进程被终止执行并退出进程列表,其中还包括了自动刷新的功能,此按钮实现的功能正如我们电脑任务管理器的“进程”功能,当电脑执行程序不能通过关闭窗口进行正常的关闭时,可以借助此办法来关闭进程。

我们还可以通过这个进程管理器来启动新的进程,当我们要在进程管理器里启动新的进程时,只要点击“启动新进程”按键,则会弹出“打开进程”对话框,我们可以通过对话框里的“浏览”窗口选择要打开的新进程,这是任务管理器里没有实现的功能,通过这个功能我们在管理计算机时变得更加灵活方便,也使进程管理的功能更加完善。

在退出此进程管理器时候,只要选择“退出”功能按钮则可关闭进程管理器,快速退出管理器的界面。

2.原理

在VisualStudio环境设计一个基于对话框的应用程序,类似于Windows自带的任务管理器,主窗口上添加一个标签控件,加入四个页面,分别是:

窗口信息、进程,服务和性能。

其中,窗口信息显示当前正在运行的任务,用列表控件进行显示,并能够对任务进行操作,如:

添加新任务,结束任务,切换任务等。

进程页面显示当前系统正在运行的进程及相关的模块,线程等,用列表控件进行显示,并能够实行终止进程、进程列表保存到文件等操作。

性能页面显示物理内存、虚拟内存和页文件等详细使用情况,CPU、内存的使用率,并绘制CPU使用率和内存使用率的图形,并用列表控件显示系统当前信息。

三、总体设计

1.功能模块

Windows任务管理器

2.流程图

四、详细设计

主要功能的代码实现:

获得进程代码实现

PublicSubListProcess()

OnErrorResumeNext

DimiAsLong,jAsLong,nAsLong

DimprocAsPROCESSENTRY32

DimsnapAsLong

DimexenameAsString'应用程序名

DimitemAsListItem

DimlngHwndProcessAsLong

DimlngModules(1To200)AsLong

DimlngCBSize2AsLong

DimlngReturnAsLong

DimstrModuleNameAsString

DimpmcAsPROCESS_MEMORY_COUNTERS

DimWKSizeAsLong

DimstrProcessNameAsString

DimstrCommentAsString'装载进程注释的字符串

DimProClassAsString'程序的类名

'开始进程循环

snap=CreateToolhelpSnapshot(TH32CS_SNAPall,0)

proc.dwSize=Len(proc)

theloop=ProcessFirst(snap,proc)

i=0

n=0

Whiletheloop<>0

i=i+1

'打开指定的进程序,并得到进程的句柄

lngHwndProcess=OpenProcess(PROCESS_QUERY_INFORMATIONOrPROCESS_VM_READ,0,proc.th32ProcessID)

IflngHwndProcess<>0Then

'枚举系统中正在运行的进程模板

lngReturn=EnumProcessModules(lngHwndProcess,lngModules

(1),200,lngCBSize2)

IflngReturn<>0Then

'返回特定数目空格的

strModuleName=Space(MAX_PATH)

'获取一个已装载模板的完整路径名称

lngReturn=GetModuleFileNameExA(lngHwndProcess,lngModules

(1),strModuleName,500)

strProcessName=Left(strModuleName,lngReturn)

strProcessName=CheckPath(Trim$(strProcessName))

IfstrProcessName<>""Then

'判断ITEM是否已经存在

j=HaveItem(proc.th32ProcessID)

Ifj=0Then'如果没有该进程

'获取短文件名

exename=Dir(strProcessName,vbNormalOrvbHiddenOrvbReadOnlyOrvbSystem)

Ifexename="hh.exe"Then

'MsgBoxSetProClass(proc.th32ProcessID,IDLE_PRIORITY_CLASS)

EndIf

'添加进程item

Setitem=List1.ListItems.Add(,"ID:

"&CStr(proc.th32ProcessID),exename)

'进程ID

item.SubItems

(1)=proc.th32ProcessID

'内存使用

pmc.cb=LenB(pmc)

'获得进程的内存信息,在这里就是计算该进程占用内存多少

lret=GetProcessMemoryInfo(lngHwndProcess,pmc,pmc.cb)

n=n+pmc.WorkingSetSize

WKSize=pmc.WorkingSetSize/1024

item.SubItems(3)=WKSize&"K"

'进程序IP号

item.SubItems

(2)=GetProClass(proc.th32ProcessID)

'进程图标将获取的图标加到IMAGE控件中

IM1.ListImages.Add,strProcessName,GetIcon(strProcessName)

item.SmallIcon=IM1.ListImages.item(strProcessName).Key

Else'如果已经有该进程

pmc.cb=LenB(pmc)

'获得进程的内存信息,在这里就是计算该进程占用内存多少

lret=GetProcessMemoryInfo(lngHwndProcess,pmc,pmc.cb)

n=n+pmc.WorkingSetSize

WKSize=pmc.WorkingSetSize/1024'计算占用内存

IfCLng(List1.ListItems.item(j).SubItems(3))<>WKSizeThenList1.ListItems.item(j).SubItems(3)=WKSize&"K"

'获得进程的类名

ProClass=GetProClass(proc.th32ProcessID)

IfProClass<>List1.ListItems.item(j).SubItems(5)ThenList1.ListItems.item(j).SubItems(5)=ProClass

EndIf

EndIf

EndIf

EndIf

theloop=ProcessNext(snap,proc)

Wend

CloseHandlesnap

'显示总进程数Label3

Ifi<>ProCountThen

Label3.Caption="进程数:

"&i

ProCount=i

EndIf

Ifn<>RamUseThen'这里的"130"是后来加上去的.是为了和系统自带的数值一样

Label5.Caption=Val(FormatLng(n))+130&"MB"

RamUse=n

Fori=950ToVal(FormatLng(n))+400Step-90

rampic.Line(0,i)-Step(1200,20),&HFF00&,BF

Nexti

EndIf

EndSub

'调用系统的"关于"窗

PrivateSubabout_Click()

OnErrorResumeNext

ShellAboutMe.hwnd,App.Title,"谭建&文程&张源",ByVal0&

EndSub

'退出本程序员

PrivateSubclose_Click()

tmrRefresh.Enabled=False

UnloadMe

EndSub

PrivateSubCloseSystem_Click()

tmrRefresh.Enabled=False

UnloadMe

EndSub

'应用程序切换程序

PrivateSubcmdSwitch_Click()

DimhwndAsLong

DimXAsLong

DimlngWWAsLong

IfLstApp.ListIndex<0ThenBeep:

ExitSub

hwnd=LstApp.ItemData(LstApp.ListIndex)

'取得窗口的结构信息

lngWW=GetWindowLong(hwnd,GWL_STYLE)

IflngWWAndWS_MINIMIZEThen

'控制窗口的可见性

X=ShowWindow(hwnd,SW_RESTORE)

EndIf

'指定一个窗口新的位置'第2个参数:

将窗口置于Z序列的顶部.

X=SetWindowPos(hwnd,HWND_TOP,0,0,0,0,_

SWP_NOMOVEOrSWP_NOSIZEOrSWP_SHOWWINDOW)

EndSub'保持当前位置或保持当前大小或显示窗口

'弹出"新建任务"窗

PrivateSubCommand1_Click()

frmnew.ShowvbModal

EndSub

 

'结束应用程序

'还有就是在如果列表中没有活动程序,点击"结束程序"会退出本身

PrivateSubCommand3_Click()

OnErrorResumeNext

'IfLstApp.ListCount=0Then

'应用程序的类名,和程序的标题

DimlpclassnameAsString,lpcaptionAsString

'程序的句柄号

DimHandleAsLong

DimRetvalAsLong

'先是打开要关闭的程序,其它就是将该程序显示成当前程序

ShellLstApp.Text,1

lpclassname=LstApp.Text

lpcaption=LstApp.Text

'获得程序的句柄号

Handle=FindWindow(vbNullString,lpcaption)

'用函数关闭应用程序

PostMessageHandle,WM_Close,0&,0&

'所了和列表控件一至,在这里删除列表中的该进程名

LstApp.RemoveItemLstApp.ListIndex

LstApp.refresh

'刷新

FindAllApps

EndSub

'结束指定进程功能代码实现

PrivateSubCommand4_Click()

OnErrorResumeNext

DimiAsLong,handAsLong,idAsLong

IfMsgBox("确定要结束进程"&List1.SelectedItem.Text&"吗?

",vbExclamation+vbOKCancel)=vbCancelThenExitSub

id=CLng(List1.SelectedItem.SubItems

(1))

Ifid<>0Then

EndProid

EndIf

ListProcess

EndSub

PrivateSubCommand5_Click()

DimAboutRetAsLong

AboutRet=ExitWindowsEx(EWX_LOGOFF,0)

EndSub

'注销用户功能实现

PrivateSubCommand6_Click()

DimAboutRetAsLong

AboutRet=ExitWindowsEx(EWX_LOGOFF,0)

EndSub

 

'切换至功能实现

PrivateSubcutoverto_Click()

cmdSwitch_Click

Me.WindowState=1

EndSub

'改变进程显示方式

PrivateSubDetailed_Click()

List1.View=lvwReport

EndSub

'结束应用程序功能实现

PrivateSubendprograme_Click()

Command3_Click

EndSub

'关机功能实现

PrivateSubExit_Click()

frmclose.ShowvbModal

EndSub

'CPU效率监视

CpuPicture(0).ScaleMode=vbPixels

CpuPicture

(1).ScaleMode=vbPixels

SetQueryObject=NewCCpuwatch

'对象初始化

QueryObject.Initialize

'打开时间控件

tmrRefresh.Enabled=True

'调用刷新过程

tmrRefresh_Timer

'*****************************************

'获得所有系统进程

ListProcess

'窗体总在前

SetTopMe,front.Checked

'***************************************************

'获得系统的当前用户

cnt&=199

s$=String$(200,0)

dl&=GetUserName(s$,cnt)

Setitem=ListView3.ListItems.Add(,,s$,,2)

item.SubItems

(2)="正在运行..."

item.SubItems

(1)=WorkstationID

'设置系统托盘

IfWindowState=vbMinimizedThen

LastState=vbNormal

Else

LastState=WindowState

EndIf

AddToTrayMe,Tray

EndSub

PrivateSubForm_Resize()

SelectCaseWindowState

CasevbMinimized

Me.Visible=False

CasevbMaximized

Me.Visible=True

EndSelect

IfWindowState<>vbMinimizedThen

LastState=WindowState

Me.Visible=True

EndIf

EndSub

PrivateSubForm_Unload(CancelAsInteger)

RemoveFromTray'关闭托盘

tmrRefresh.Enabled=False

UnloadMe

EndSub

PrivateSubfront_Click()

front.Checked=Notfront.Checked

SetTopMe,front.Checked

EndSub

PrivateSubjsjc_Click()

Command4_Click

EndSub

PrivateSubList1_ColumnClick(ByValColumnHeaderAsMSComctlLib.ColumnHeader)

OnErrorResumeNext

WithList1

'设置Sorted为True以将列表排序。

If(ColumnHeader.Index-1)=.SortKeyThen

.SortOrder=(.SortOrder+1)Mod2

.Sorted=True

Else

.Sorted=False

.SortOrder=0

.SortKey=ColumnHeader.Index-1

.Sorted=True

EndIf

EndWith

EndSub

'右击菜单;,,并初使化进程的优先级别

PrivateSubList1_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,yAsSingle)

OnErrorResumeNext

DimjAsLong,iAsLong

IfButton=2Then

IfList1.HitTest(X,y)IsNothingThenExitSub

j=List1.HitTest(X,y).Index

List1.ListItems(j).Selected=True

Fori=0To5

mnuSetProClassSub(i).Checked=False

Next

SelectCaseList1.SelectedItem.SubItems

(2)

Case"实时":

mnuSetProClassSub(0).Checked=True

Case"高":

mnuSetProClassSub

(1).Checked=True

Case"较高":

mnuSetProClassSub

(2).Checked=True

Case"标准":

mnuSetProClassSub(3).Checked=True

Case"较低":

mnuSetProClassSub(4).Checked=True

Case"低":

mnuSetProClassSub(5).Checked=True

EndSelect

PopupMenuyou

EndIf

EndSub

PrivateSublog_Click()

frmclose.ShowvbModal

EndSub

'双击切换到另一个程序

SublstApp_DblClick()

cmdSwitch.Value=True

EndSub

'任务窗

FunctionTaskWindow(hwCurrAsLong)AsLong

DimlngStyleAsLong

'调用函数得到指定窗口的信息'第一个参数是指定窗口的句柄,第二个是窗口的样式

lngStyle=GetWindowLong(hwCurr,GWL_STYLE)

If(lngStyleAndIsTask)=IsTaskThenTaskWindow=True

EndFunction

'设置进程优先级

PublicFunctionSetProClass(ByValPIDAsLong,ByValClassIDAsLong)

OnErrorResumeNext

DimhwdAsLong

'在这里得到一个句柄

hwd=OpenProcess(PROCESS_SET_INFORMATION,0,PID)

'调用这个函数设置进程的优先级

SetProClass=SetPriorityClass(hwd,ClassID)

EndFunction

'右键菜单

PrivateSubLstApp_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,yAsSingle)

IfButton=2Then

PopupMenuApplication

EndIf

EndSub

'在这里设置进程优先级

PrivateSubmnuSetProClassSub_Click(IndexAsInteger)

OnErrorResumeNext

DimPIDAsLong,rtnAsLong

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2