操作系统课程设计报告完成版_第1页
操作系统课程设计报告完成版_第2页
操作系统课程设计报告完成版_第3页
操作系统课程设计报告完成版_第4页
操作系统课程设计报告完成版_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

XX大学课程设计报告课程设计题目:Windows系统资源管理器与任务管理器学院:专业班级:年级:2008级姓名:学号:完成时间:2012年7月3日成绩:指导教师: 教务处课程设计指导教师评定成绩表项目分值优秀(100>x≥90)良好(90>x≥80)中等(80>x≥70)及格(70>x≥60)不及格(x<60)评分参考标准参考标准参考标准参考标准参考标准学习态度15学习态度认真,科学作风严谨,严格保证设计时间并按任务书中规定的进度开展各项工作学习态度比较认真,科学作风良好,能按期圆满完成任务书规定的任务学习态度尚好,遵守组织纪律,基本保证设计时间,按期完成各项工作学习态度尚可,能遵守组织纪律,能按期完成任务学习马虎,纪律涣散,工作作风不严谨,不能保证设计时间和进度技术水平与实际能力25设计合理、理论分析与计算正确,实验数据准确,有很强的实际动手能力、经济分析能力和计算机应用能力,文献查阅能力强、引用合理、调查调研非常合理、可信设计合理、理论分析与计算正确,实验数据比较准确,有较强的实际动手能力、经济分析能力和计算机应用能力,文献引用、调查调研比较合理、可信设计合理,理论分析与计算基本正确,实验数据比较准确,有一定的实际动手能力,主要文献引用、调查调研比较可信设计基本合理,理论分析与计算无大错,实验数据无大错设计不合理,理论分析与计算有原则错误,实验数据不可靠,实际动手能力差,文献引用、调查调研有较大的问题创新10有重大改进或独特见解,有一定实用价值有较大改进或新颖的见解,实用性尚可有一定改进或新的见解有一定见解观念陈旧论文(计算书、图纸)撰写质量50结构严谨,逻辑性强,层次清晰,语言准确,文字流畅,完全符合规范化要求,书写工整或用计算机打印成文;图纸非常工整、清晰结构合理,符合逻辑,文章层次分明,语言准确,文字流畅,符合规范化要求,书写工整或用计算机打印成文;图纸工整、清晰结构合理,层次较为分明,文理通顺,基本达到规范化要求,书写比较工整;图纸比较工整、清晰结构基本合理,逻辑基本清楚,文字尚通顺,勉强达到规范化要求;图纸比较工整内容空泛,结构混乱,文字表达不清,错别字较多,达不到规范化要求;图纸不工整或不清晰指导教师评定成绩:指导教师签名:年月日重庆大学本科学生课程设计任务书课程设计题目Windows系统资源管理器与任务管理器学院计算机专业网络工程年级09已知参数和设计要求:熟悉操作系统资源管理原理,掌握编程接口,能够使用高级语言调用编程接口,设计并实现Windows操作系统资源管理器的全部功能(包括:菜单、图标、右键菜单),实现软件资源和数据资源的管理。掌握操作系统任务与进程概念,熟悉任务与进程管理的方法,通过高级语言编程接口设计并实现Windows操作系统任务管理器的全部功能(包括:菜单、右键菜单、应用程序管理、进程管理、性能显示、联网状态和用户信息)。学生应完成的工作:了解Windows操作系统的发展历史了解WindowsXP的体系结构掌握Windows系统API的调用方法设计并实现Windows操作系统资源管理器的全部功能(包括:菜单、图标、右键菜单),实现软件资源和数据资源的管理。设计并实现Windows操作系统任务管理器的全部功能(包括:菜单、右键菜单、应用程序管理、进程管理、性能显示、联网状态和用户信息)。目前资料收集情况(含指定参考资料):在互联网上收集相关资料WilliamStallings,OperatingSystemsInternalsandDesignPrinciples,6thEdition,电子工业出版社,2010年课程设计的工作计划:第1—第3天:查询、收集资料,学习相关知识;第4天:熟悉掌握API函数使用;第5—第9天:设计、实现程序;第10天:编写课程设计报告;第11天:检查程序;第12天:修改完善程序与课程设计报告。任务下达日期2012年6月18日完成日期2012年7月7日目录HYPERLINK摘要 1HYPERLINK第一章 课程设计要求 2HYPERLINK第二章 设计概要 3HYPERLINK2.1功能设计 3HYPERLINK2.2程序系统功能模块 3HYPERLINK2.2.1Windows任务管理器功能模块 3HYPERLINK2.2.2Windows资源管理器功能模块 4HYPERLINK2.3功能分析 4HYPERLINK2.3.1Windows任务管理器功能流程图 4HYPERLINK2.3.2Windows资源管理器功能流程图 5HYPERLINK2.3.3Windows任务管理器界面截图 6HYPERLINK2.3.4Windows资源管理器界面截图 8HYPERLINK2.3.5程序主要功能说明 11HYPERLINK第三章调试分析与测试结果 34HYPERLINK3.1Windows任务管理器 34HYPERLINK3.1.1基本界面 34HYPERLINK3.1.2进程状态查看 35HYPERLINK3.1.3CPU状态查看 36HYPERLINK3.1.4进程管理功能 36HYPERLINK3.2Windows资源管理器 39HYPERLINK3.2.1基本界面 39HYPERLINK3.2.2剪切功能的实现 41HYPERLINK3.2.3复制功能的实现 42HYPERLINK3.2.4删除功能的实现 43HYPERLINK第四章 设计总结 44HYPERLINK第五章 参考文献 45摘要操作系统是一个介于软件和硬件之间的特殊硬件,一方面分配硬件资源另一方面支持软件在它上面的实现,如何实时地监控和掌握系统软硬件工作的状态、资源分配和使用的情况,对计算机用户而言十分重要,于是就有了任务管理器这样的实时监控窗口;同理,我们也需要掌握计算机硬件设备的工作状态,掌握其如何存储文件、分配硬盘资源等,这也是我们做资源管理器的初衷。我们的电脑需要我们去了解它的运行状况,掌握和管理它的进程,并对其异常情况给予操作和控制,任务管理器就像是我们了解和控制自己电脑运作的一个窗口,通过这个窗口我们可以了解到电脑所有进程运行状况,并对运行的进程加于管理和控制,正如在本实验中,启动进程管理器后,可以通过”获取进程”功能来获得本计算机启动的进程,以及与该进程相关的信息,其中包括的信息有:进程映像名称,进程开启的线程数,进程的PID以及进程的优先数,我们可以通过这些信息来了解计算机中每个进程的使用状况。同时我们可以在进程管理器上选中一个要终止的的进程,点击“终止进程”功能按钮,该进程被终止执行并退出进程列表,其中还包括了自动刷新的功能,此按钮实现的功能正如我们电脑任务管理器的“进程”功能,当电脑执行程序不能通过关闭窗口进行正常的关闭时,可以借助此办法来关闭进程。我们还可以通过这个进程管理器来启动新的进程,当我们要在进程管理器里启动新的进程时,只要点击“启动新进程”按键,则会弹出“打开进程”对话框,我们可以通过对话框里的“浏览”窗口选择要打开的新进程,这是任务管理器里没有实现的功能,通过这个功能我们在管理计算机时变得更加灵活方便,也使进程管理的功能更加完善。在退出此进程管理器时候,只要选择“退出”功能按钮则可关闭进程管理器,快速退出管理器的界面。本管理器设计比较简洁,操作灵活,使用简单,可以为我们管理和控制计算机的进程提供了一个简便的方法,是我们控制本计算机进程和了解计算机进程情况的良好助手。关键词:任务管理器资源管理器操作系统课程设计要求题目名称:Windows系统资源管理器与任务管理器题目类型:设计型课程设计目的:熟悉操作系统资源管理原理,掌握编程接口,能够使用高级语言调用编程接口,设计并实现Windows操作系统资源管理器和任务管理器的全部功能。已知参数和设计要求:熟悉操作系统资源管理原理,掌握编程接口,能够使用高级语言调用编程接口,设计并实现Windows操作系统资源管理器的全部功能(包括:菜单、图标、右键菜单),实现软件资源和数据资源的管理;掌握操作系统任务与进程概念,熟悉任务与进程管理的方法,通过高级语言编程接口设计并实现Windows操作系统任务管理器的全部功能(包括:菜单、右键菜单、应用程序管理、进程管理、性能显示、联网状态和用户信息)。实验内容:了解Windows操作系统的发展历史;了解WindowsXP的体系结构;掌握Windows系统API的调用方法;设计并实现Windows操作系统资源管理器的全部功能(包括:菜单、图标、右键菜单),实现软件资源和数据资源的管理;设计并实现Windows操作系统任务管理器的全部功能(包括:菜单、右键菜单、应用程序管理、进程管理、性能显示、联网状态和用户信息)。设计概要2.1功能设计本项目是为了实现模拟Windows系统任务管理器和资源管理器。项目的分析及功能设计要求如下:编程模拟实现Windows系统任务管理器和资源管理器两个应用程序;服务器端可以对文件进行管理,包括上传,下载,删除文件,重命名等;客服端可以实现文件的上传、下载以及查看服务器下默认目录的文件列表;在程序中应用多线程来实现多个客户端同时对一个服务器端进行请求操作。2.2程序系统功能模块关机查看选项文件功能设计当前用户状态内存使用状态CPU状态进程、应用程序状态进程数实时状态监控Windows任务管理器新建、切换进程、关闭进程关于关机、注销立即刷新、小图标、详细列表总在最前新建任务、退出管理器进程帮助2.2.1Windows任务管理器功能模块关机查看选项文件功能设计当前用户状态内存使用状态CPU状态进程、应用程序状态进程数实时状态监控Windows任务管理器新建、切换进程、关闭进程关于关机、注销立即刷新、小图标、详细列表总在最前新建任务、退出管理器进程帮助图2.1文件功能设计文件类型文件大小目录树资源状态显示Windows资源管理器2.2.2Windows资源管理器功能模块文件功能设计文件类型文件大小目录树资源状态显示Windows资源管理器文件名文件名修改时间修改时间新建、打开、保存、另存为、最近的文件、退出新建、打开、保存、另存为、最近的文件、退出关于帮助视图关于帮助视图撤销、剪切、粘贴、复制编辑撤销、剪切、粘贴、复制编辑工具栏和停靠窗口工具栏和停靠窗口应用程序外观状态栏图2.22.3功能分析2.3.1Windows任务管理器功能流程图图Windows资源管理器功能流程图显示数据显示数据控件消息鼠标事件消息资源数据资源文件用户操作鼠标显示操作效果资源管理器控制系统鼠标事件处理图Windows任务管理器界面截图整体界面不同状态显示的截图2.3.4Windows资源管理器界面截图整体界面:2、功能界面展示:“文件”功能展示“编辑”功能展示“视图”功能展示“帮助”功能展示2.3.5程序主要功能说明一、Windows任务管理器主要功能代码实现:'获得进程代码实现PublicSubListProcess()OnErrorResumeNextDimiAsLong,jAsLong,nAsLongDimprocAsPROCESSENTRY32DimsnapAsLongDimexenameAsString'应用程序名DimitemAsListItemDimlngHwndProcessAsLongDimlngModules(1To200)AsLongDimlngCBSize2AsLongDimlngReturnAsLongDimstrModuleNameAsStringDimpmcAsPROCESS_MEMORY_COUNTERSDimWKSizeAsLongDimstrProcessNameAsStringDimstrCommentAsString'装载进程注释的字符串DimProClassAsString'程序的类名'开始进程循环snap=CreateToolhelpSnapshot(TH32CS_SNAPall,0)proc.dwSize=Len(proc)theloop=ProcessFirst(snap,proc)i=0n=0Whiletheloop<>0i=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'进程IDitem.SubItems(1)=proc.th32ProcessID'内存使用pmc.cb=LenB(pmc)'获得进程的内存信息,在这里就是计算该进程占用内存多少lret=GetProcessMemoryInfo(lngHwndProcess,pmc,pmc.cb)n=n+pmc.WorkingSetSizeWKSize=pmc.WorkingSetSize/1024item.SubItems(3)=WKSize&"K"'进程序IP号item.SubItems(2)=GetProClass(proc.th32ProcessID)'进程图标将获取的图标加到IMAGE控件中Else'如果已经有该进程pmc.cb=LenB(pmc)'获得进程的内存信息,在这里就是计算该进程占用内存多少lret=GetProcessMemoryInfo(lngHwndProcess,pmc,pmc.cb)n=n+pmc.WorkingSetSizeWKSize=pmc.WorkingSetSize/1024'计算占用内存'获得进程的类名ProClass=GetProClass(proc.th32ProcessID)EndIfEndIfEndIfEndIftheloop=ProcessNext(snap,proc)WendCloseHandlesnap'显示总进程数Label3Ifi<>ProCountThenLabel3.Caption="进程数:"&iProCount=iEndIfIfn<>RamUseThen'这里的"130"是后来加上去的.是为了和系统自带的数值一样Label5.Caption=Val(FormatLng(n))+130&"MB"RamUse=nFori=950ToVal(FormatLng(n))+400Step-90rampic.Line(0,i)-Step(1200,20),&HFF00&,BFNextiEndIfEndSub'调用系统的"关于"窗PrivateSubabout_Click()OnErrorResumeNextShellAboutMe.hwnd,App.Title,"谭建&文程&张源",ByVal0&EndSub'退出本程序员PrivateSubclose_Click()tmrRefresh.Enabled=FalseUnloadMeEndSubPrivateSubCloseSystem_Click()tmrRefresh.Enabled=FalseUnloadMeEndSub'应用程序切换程序PrivateSubcmdSwitch_Click()DimhwndAsLongDimXAsLongDimlngWWAsLongIfLstApp.ListIndex<0ThenBeep:ExitSubhwnd=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.ShowvbModalEndSub'结束应用程序'还有就是在如果列表中没有活动程序,点击"结束程序"会退出本身PrivateSubCommand3_Click()OnErrorResumeNext'IfLstApp.ListCount=0Then'应用程序的类名,和程序的标题DimlpclassnameAsString,lpcaptionAsString'程序的句柄号DimHandleAsLongDimRetvalAsLong'先是打开要关闭的程序,其它就是将该程序显示成当前程序ShellLstApp.Text,1lpclassname=LstApp.Textlpcaption=LstApp.Text'获得程序的句柄号Handle=FindWindow(vbNullString,lpcaption)'用函数关闭应用程序PostMessageHandle,WM_Close,0&,0&'所了和列表控件一至,在这里删除列表中的该进程名LstApp.RemoveItemLstApp.ListIndexLstApp.refresh'刷新FindAllAppsEndSub'结束指定进程功能代码实现PrivateSubCommand4_Click()OnErrorResumeNextDimiAsLong,handAsLong,idAsLongIfMsgBox("确定要结束进程吗?",vbExclamation+vbOKCancel)=vbCancelThenExitSubIfid<>0ThenEndProidEndIfListProcessEndSubPrivateSubCommand5_Click()DimAboutRetAsLongAboutRet=ExitWindowsEx(EWX_LOGOFF,0)EndSub'注销用户功能实现PrivateSubCommand6_Click()DimAboutRetAsLongAboutRet=ExitWindowsEx(EWX_LOGOFF,0)EndSub'切换至功能实现PrivateSubcutoverto_Click()cmdSwitch_ClickMe.WindowState=1EndSub'改变进程显示方式PrivateSubDetailed_Click()List1.View=lvwReportEndSub'结束应用程序功能实现PrivateSubendprograme_Click()Command3_ClickEndSub'关机功能实现PrivateSubExit_Click()frmclose.ShowvbModalEndSub'CPU效率监视CpuPicture(0).ScaleMode=vbPixelsCpuPicture(1).ScaleMode=vbPixelsSetQueryObject=NewCCpuwatch'对象初始化QueryObject.Initialize'打开时间控件tmrRefresh.Enabled=True'调用刷新过程tmrRefresh_Timer'*****************************************'获得所有系统进程ListProcess'窗体总在前SetTopMe,front.Checked'***************************************************'获得系统的当前用户cnt&=199s$=String$(200,0)dl&=GetUserName(s$,cnt)item.SubItems(2)="正在运行..."item.SubItems(1)=WorkstationID'设置系统托盘IfWindowState=vbMinimizedThenLastState=vbNormalElseLastState=WindowStateEndIfAddToTrayMe,TrayEndSubPrivateSubForm_Resize()SelectCaseWindowStateCasevbMinimizedMe.Visible=FalseCasevbMaximizedMe.Visible=TrueEndSelectIfWindowState<>vbMinimizedThenLastState=WindowStateMe.Visible=TrueEndIfEndSubPrivateSubForm_Unload(CancelAsInteger)RemoveFromTray'关闭托盘tmrRefresh.Enabled=FalseUnloadMeEndSubPrivateSubfront_Click()front.Checked=Notfront.CheckedSetTopMe,front.CheckedEndSubPrivateSubjsjc_Click()Command4_ClickEndSubPrivateSubList1_ColumnClick(ByValColumnHeaderAsMSComctlLib.ColumnHeader)OnErrorResumeNextWithList1'设置Sorted为True以将列表排序。If(ColumnHeader.Index-1)=.SortKeyThen.SortOrder=(.SortOrder+1)Mod2.Sorted=TrueElse.Sorted=False.SortOrder=0.SortKey=ColumnHeader.Index-1.Sorted=TrueEndIfEndWithEndSub'右击菜单;,,并初使化进程的优先级别PrivateSubList1_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,yAsSingle)OnErrorResumeNextDimjAsLong,iAsLongIfButton=2ThenIfList1.HitTest(X,y)IsNothingThenExitSubj=List1.HitTest(X,y).IndexList1.ListItems(j).Selected=TrueFori=0To5mnuSetProClassSub(i).Checked=FalseNextCase"实时":mnuSetProClassSub(0).Checked=TrueCase"高":mnuSetProClassSub(1).Checked=TrueCase"较高":mnuSetProClassSub(2).Checked=TrueCase"标准":mnuSetProClassSub(3).Checked=TrueCase"较低":mnuSetProClassSub(4).Checked=TrueCase"低":mnuSetProClassSub(5).Checked=TrueEndSelectPopupMenuyouEndIfEndSubPrivateSublog_Click()frmclose.ShowvbModalEndSub'双击切换到另一个程序SublstApp_DblClick()cmdSwitch.Value=TrueEndSub'任务窗FunctionTaskWindow(hwCurrAsLong)AsLongDimlngStyleAsLong'调用函数得到指定窗口的信息'第一个参数是指定窗口的句柄,第二个是窗口的样式lngStyle=GetWindowLong(hwCurr,GWL_STYLE)If(lngStyleAndIsTask)=IsTaskThenTaskWindow=TrueEndFunction'设置进程优先级PublicFunctionSetProClass(ByValPIDAsLong,ByValClassIDAsLong)OnErrorResumeNextDimhwdAsLong'在这里得到一个句柄hwd=OpenProcess(PROCESS_SET_INFORMATION,0,PID)'调用这个函数设置进程的优先级SetProClass=SetPriorityClass(hwd,ClassID)EndFunction'右键菜单PrivateSubLstApp_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,yAsSingle)IfButton=2ThenPopupMenuApplicationEndIfEndSub'在这里设置进程优先级PrivateSubmnuSetProClassSub_Click(IndexAsInteger)OnErrorResumeNextDimPIDAsLong,rtnAsLong得到进程PIDIfmnuSetProClassSub(Index).Checked=TrueThenExitSubSelectCaseIndexCase1:rtn=SetProClass(PID,HIGH_PRIORITY_CLASS)'高Case2:rtn=SetProClass(PID,32768)'较高Case3:rtn=SetProClass(PID,NORMAL_PRIORITY_CLASS)'标准Case4:rtn=SetProClass(PID,16384)'较低Case5:rtn=SetProClass(PID,IDLE_PRIORITY_CLASS)'低EndSelectIfrtn=0ThenMsgBox"无法为进程设置优先级。",vbCriticalEndSub'弹出"新建任务"窗PrivateSubnewfile_Click()frmnew.ShowvbModalEndSubPrivateSubplaseago_Click()cmdSwitch_ClickEndSubPrivateSubrefresh_Click()frmclose.ShowvbModalEndSub'刷新PrivateSubrefresh1_Click()FindAllAppsEndSubPrivateSubshowago_Click()showago.Checked=Notshowago.CheckedSetTopMe,showago.CheckedEndSubPrivateSubsmall_Click()List1.View=Index+2List1.Sorted=TrueEndSubPrivateSubSSTab1_DblClick()EndSubPrivateSubTimer3_Timer()DimXAsLongCallGlobalMemoryStatus(minfo)'总的内存量X=-minfo.dwTotalPhys/1024Label2(0).Caption=Str$(Int(X))'可用的内存量X=minfo.dwAvailPhys/1024Label2(1).Caption=Str$(Int(X))'系统缓存Label2(2).Caption=-(Val(Label2(0))-Val(Label2(1))-500)'虚拟内存总数X=minfo.dwTotalVirtual/1024Label7(0).Caption=Str$(Int(X/1024))&"M"'可用虚拟内存X=minfo.dwAvailVirtual/1024Label7(1).Caption=Str$(Int(X/1024))&"M"EndSubPrivateSubTimer4_Timer()Line14.X2=Line14.X2-20Line14.X1=Line14.X1-20IfLine14.X1=0ThenTimer4.Enabled=FalseElseTimer4.Enabled=TrueEndIfEndSubPrivateSubTimer6_Timer()FindAllAppsEndSub'CPU效率监视PrivateSubtmrRefresh_Timer()DimRetAsIntegerDimcntAsIntegerDimiAsInteger'返回CPU状态Ret=QueryObject.Querycnt=Int(Ret/10+1)CpuPicture(0).Cls'清除窗口中的内容IfRet<>-1ThenFori=0Tocnt-1'用PIC控件的LINE方法在PIC上画图,用以显示CPU的占用率CpuPicture(0).Line(2,70-(5+i*6))-(79,70-(5+i*6+2)),&HFF00&,BFNextiShiftPointsGraphPoints(UBound(GraphPoints))=RetCpuPicture(1).ClsForcnt=LBound(GraphPoints)ToUBound(GraphPoints)-1CpuPicture(1).Line(cnt,80-GraphPoints(cnt))-(cnt+1,80-GraphPoints(cnt+1)),&HFF00&NextcntCpuLabel.Caption=CStr(Ret)+"%"Label4.Caption="CPU使用:"&CStr(Ret)+"%"'托盘显示CPU使用率SetTrayTip"CPU使用:"&CStr(Ret)+"%"EndIfEndSub'CPU效率监视SubShiftPoints()DimcntAsIntegerForcnt=LBound(GraphPoints)ToUBound(GraphPoints)-1GraphPoints(cnt)=GraphPoints(cnt+1)NextcntEndSub'判断item是否存在PublicFunctionHaveItem(ByValitemIDAsLong)AsLongOnErrorGoTozbbHaveItem=List1.ListItems("ID:"&CStr(itemID)).IndexExitFunctionzbb:HaveItem=0EndFunction'结束一个进程PublicSubEndPro(ByValPIDAsLong)OnErrorResumeNextDimlngHwndProcessAsLongDimhandAsLongDimexitCodeAsLong'打开要结束的进程,把该进程的句柄赋给变量hand=OpenProcess(PROCESS_TERMINATE,True,PID)'结束进程TerminateProcesshand,exitCode'关闭进程的内核对象......(除非对内核对象的所有引用都已关闭,否则该对象不会实际删除)CloseHandlehandEndSubPrivateSubTimer2_Timer()CheckProcessEndSubPrivateSubTimer1_Timer()ListProcessEndSub'将正在运行的应用程序加到列表控件中SubFindAllApps()DimhwCurrAsLongDimintLenAsLongDimstrTitleAsStringDimitemAsListItem'先清空LstApp.Clear'获取一个窗口的句柄'为一个源子窗口寻找第一个兄弟(同级)窗口,或寻找第一个顶级窗口hwCurr=GetWindow(Me.hwnd,GW_HWNDFIRST)DoWhilehwCurrIfhwCurr<>Me.hwndAndTaskWindow(hwCurr)Then'调查窗口标题文字或控件内容的长短intLen=GetWindowTextLength(hwCurr)+1strTitle=Space$(intLen)'取得窗体的标题(caption)文字intLen=GetWindowText(hwCurr,strTitle,intLen)IfintLen>0ThenLstApp.AddItemstrTitleLstApp.ItemData(LstApp.NewIndex)=hwCurrEndIfEndIf'获取下一个窗口的句柄hwCurr=GetWindow(hwCurr,GW_HWNDNEXT)LoopEndSubPublicFunctionCheckPath(ByValPathStrAsString)AsStringOnErrorResumeNext'返回一个字符串,该字符串中指定的子字符串已被替换成另一子字符串,并且替换发生的次数也是指定的。PathStr=Replace(PathStr,"\??\","")IfUCase(Left$(PathStr,12))="\SYSTEMROOT\"ThenPathStr=GetWinDir&Mid$(PathStr,12)CheckPath=PathStrEndFunction新建一个进程的命令'OpenProcess函数声明PrivateDeclareFunctionOpenProcessLib"kernel32"_(ByValdwDesiredAccessAsLong,_ByValbInheritHandleAsLong,_ByValdwProcessIdAsLong_)AsLong'CloseHandle函数声明PrivateDeclareFunctionCloseHandleLib"kernel32"_(ByValhObjectAsLong)AsLongPrivateSubclose_Click()UnloadMeEndSubPrivateSubcmdnew_Click()cmdialog.DialogTitle="浏览"cmdialog.Filter="程序|*.exe|所有文件|*.*"cmdialog.ShowOpenCombo1.Text=cmdialog.FileNameEndSubPrivateSubcmdOK_Click()OnErrorGoToerrDimhProgramAsLong'被检测的程序进程句柄DimX'打开指定的程序X=Shell(Combo1.Text,1)hProgram=OpenProcess(0,False,X)CloseHandlehProgramExitSubUnloadMeerr:MsgBox"Windows找不到文件"&Combo1.Text&"。请确定文件名是否正确后,再试一次。要搜索文件,请单击[开始]按钮,然"&Chr(13)&Chr(10)&"后单击“搜索”。",vbExclamation,Combo1.TextCombo1.SetFocusCombo1.SelStart=0Combo1.SelLength=Len(Combo1.Text)EndSubPrivateSubCombo1_Change()IfCombo1.Text=""ThencmdOK.Enabled=FalseElsecmdOK.Enabled=TrueEndIfEndSubPrivateSubForm_Load()SetTopMe,TrueEndSub二、Windows资源管理器主要功能代码实现://DoDataExchange数据动态绑定,对按钮添加变量voidCFileMangementView::DoDataExchange(CDataExchange*pDX){ CFormView::DoDataExchange(pDX); DDX_Control(pDX,IDC_TREE1,m_wbdShellTree); DDX_Control(pDX,IDC_LIST1,m_wndShellList);}//更改窗口样式的时候重写此函数BOOLCFileMangementView::PreCreateWindow(CREATESTRUCT&cs){ //CREATESTRUCTcs来修改窗口类或样式 returnCFormView::PreCreateWindow(cs);}//右键点击空白处功能代码实现voidCFileMangementView::OnRButtonUp(UINTnFlags,CPointpoint){ ClientToScreen(&point); OnContextMenu(this,point);}voidCFileMangementView::OnContextMenu(CWnd*pWnd,CPointpoint){ theApp.GetContextMenuManager()->ShowPopupMenu(IDR_POPUP_EDIT,point.x,point.y,this,TRUE);}//CFileMangementView诊断#ifdef_DEBUGvoidCFileMangementView::AssertValid()const{ CFormView::AssertValid();}voidCFileMangementView::Dump(CDumpContext&dc)const{ CFormView::Dump(dc);}CFileMangementDoc*CFileMangementView::GetDocument()const//非调试版本是内联的{ ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CFileMangementDoc))); return(CFileMangementDoc*)m_pDocument;}#endif//_DEBUG//CFileMangementView消息处理程序voidCFileMangementView::OnSize(UINTnType,intcx,intcy){ CFormView::OnSize(nType,cx,cy); //TODO:在此处添加消息处理程序代码// LockWindowUpdate(); CRectrc; if(m_wbdShellTree.GetSafeHwnd()) { m_wbdShellTree.GetWindowRect(rc); ScreenToClient(rc); rc.bottom+=cy-oldRc.Height(); m_wbdShellTree.ShowWindow(SW_HIDE); m_wbdShellTree.MoveWindow(rc); m_wbdShellTree.ShowWindow(SW_SHOW); } if(m_wndShellList.GetSafeHwnd()) { m_wndShellList.GetWindowRect(rc); ScreenToClient(rc); rc.right+=(cx-oldRc.Width()); rc.bottom+=cy-oldRc.Height(); m_wndShellList.ShowWindow(SW_HIDE); m_wndShellList.MoveWindow(rc); m_wndShellList.ShowWindow(SW_SHOW); } //RedrawWindow(); /*CRectrc2;rc2.top=oldRc.Height()+oldRc.top; rc2.left=oldRc.left;rc2.right=oldRc.right; rc2.bottom=oldRc.bottom+cy-oldRc.Height(); InvalidateRect(rc2,FALSE);*/ GetClientRect(oldRc);}//绘图代码实现voidCFileMangementView::OnDraw(CDC*pDC){ CRectrcClient; GetClientRect(&rcClient); //Draw3dRect实现绘制3D矩形的位置大小 pDC->Draw3dRect(0,0,rcClient.Width(),rcClient.Height(),::GetSysColor(COLOR_BTNSHADOW),::GetSysColor(COLOR_BTNHILIGHT));}//OnEraseBkgnd擦除了背景,则返回非零值;否则返回0//true表示已处理背景刷新,false表示需要在OnDraw里处理BOOLCFileMangementView::OnEraseBkgnd(CDC*pDC){ returntrue; //returnCFormView::OnEraseBkgnd(pDC);}//文件右键功能实现voidCFileMangementView::OnNMRClickList1(NMHDR*pNMHDR,LRESULT*pResult){ LPNMITEMACTIVATEpNMItemActivate=reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR); //TODO:在此添加控件通知处理程序代码 if(pNMItemActivate->iItem==-1) { CPointoPoint; CMenumenu; GetCursorPos(&oPoint); menu.LoadMenu(IDR_POPUP_EDIT1);//装载自定义的右键菜单 CMenu*pSubMenu;//定义下面要用到的cmenu对象 pSubMenu=menu.GetSubMenu(0);//获取第一个弹出菜单,所以第一个菜单必须有子菜单 if(m_isCopy||m_isCut)pSubMenu->EnableMenuItem(ID_EDIT_PASTE,MF_ENABLED); elsepSubMenu->EnableMenuItem(ID_EDIT_PASTE,MF_DISABLED|MF_GRAYED);//在指定位置显示弹出菜单 pSubMenu->TrackPopupMenu(TPM_LEFTALIGN,oPoint.x,oPoint.y,this); } else { CPointoPoint; CMenumenu; GetCursorPos(&oPoint);//定位光标 menu.LoadMenu(IDR_POPUP_EDIT);//装载自定义的右键菜单,即右侧列表的右键功能 CMenu*pSubMenu;//定义下面要用到的cmenu对象 pSubMenu=menu.GetSubMenu(0);//获取第一个弹出菜单,所以第一个菜单必须有子菜单 //pSubMenu->EnableMenuItem(IDM_REMOVE_FROM_KILL_LIST,MF_DISABLED|MF_GRAYED); pSubMenu->TrackPopupMenu(TPM_LEFTALIGN,oPoint.x,oPoint.y,this);//在指定位置显示弹出菜单 //menu.Detach(); //menu.DestroyMenu(); for(inti=0;i<m_wndShellList.GetItemCount();i++) { if(m_wndShellList.GetItemState(i,LVIS_SELECTED)==LVIS_SELECTED) { m_wndShellList.GetItemPath(m_fileName,i); m_Item=i; } } } *pResult=0;}//打开指定文件代码实现voidCFileMangementView::OnOpenFile(){ //TODO:在此添加命令处理程序代码 //ShellExecute:运行一个外部程序(或者是打开一个已注册的文件、打开一个目录、打印一个文件等等),并对外部程序有一定的控制 ShellExecute(this->m_hWnd,_T("open"),m_fileName,NULL,NULL,SW_SHOW);}//重命名voidCFileMangementView::OnMyEditRename(){ //TODO:在此添加命令处理程序代码 m_wndShellList.EditLabel(m_Item)->SetFocus(); }//重命名功能实现voidCFileMangementView::OnLvnEndlabeleditList1(NMHDR*pNMHDR,LRESULT*pResult){ NMLVDISPINFO*pDispInfo=reinterpret_cast<NMLVDISPINFO*>(pNMHDR); //TODO:在此添加控件通知处理程序代码 boolisDir=false; if(::GetFileAttributes(m_fileName)&FILE_ATTRIBUTE_DIRECTORY) {isDir=true;} CStringstrMsg,strHint,strPre,strNxt; CStringstrTem1,strTem2;strTem2=strTem1=m_fileName; CStrings1=pDispInfo->item.pszText; if(s1!=_T("")&&s1!=m_fileInName) { //if(s1.Find('\\')+1&&s1.Find('/')+1&&s1.Find(':')+1&&s1.Find('*')+1&&s1.Find('?')+1&&s1.Find('"')+1&&s1.Find('<')+1&&s1.Find('>')+1&&s1.Find('|')+1) if(s1.FindOneOf(_T("\\/:*?\"<>|"))+1) {AfxMessageBox(_T("文件不能含有\\/:*?\"<>|")); } else { strTem1.Insert(strTem1.GetLength()+1,_T('\0')); fileOpStruct.hwnd=NULL; fileOpStruct.pFrom=strTem1; strTem2.Delete(m_fileName.ReverseFind('\\')+1,m_fileName.GetLength()-m_fileName.ReverseFind('\\')-1); strTem2.Insert(strTem2.GetLength()+1,s1); strTem2.Insert(strTem2.GetLength()+1,_T('\0')); fileOpStruct.pTo=strTem2; fileOpStruct.wFunc=FO_RENAME; fileOpStruct.fFlags=FOF_SILENT; fileOpStruct.hNameMappings=NULL; fileOpStruct.lpszProgressTitle=NULL; intres=SHFileOperation(&fileOpStruct); if(fileOpStruct.fAnyOperationsAborted) {AfxMessageBox(_T("重命名被取消了"));} else { if(res!=0) { AfxMessageBox(_T("重命名失败,请检查文件是否可以重命名!")); } else { m_wndShellList.Refresh(); if(isDir) { m_wndShellList.GetCurrentFolder(strTem1); m_wbdShellTree.Refresh(); m_wbdShellTree.SelectPath(strTem1); } } } } } *pResult=0;}voidCFileMangementView::OnLvnBeginlabeleditList1(NMHDR*pNMHDR,LRESULT*pResult){ NMLVDISPINFO*pDispInfo=reinterpret_cast<NMLVDISPINFO*>(pNMHDR); //TODO:在此添加控件通知处理程序代码 m_wndShellList.GetEditControl()->LimitText(30); m_wndShellList.GetEditControl()->GetWindowText(m_fileInName); *pResult=0;}//删除功能代码实现voidCFileMangementView::OnMyEditDel(){ //TODO:在此添加命令处理程序代码 boolisDir=false; if(::GetFileAttributes(m_fileName)&FILE_ATTRIBUTE_DIRECTORY) {isDir=true;} CStringstrTem1;strTem1=m_fileName; strTem1.Insert(strTem1.GetLength()+1,_T('\0')); fileOpStruct.hwnd=NULL; fileOpStruct.pFrom=strTem1; fileOpStruct.pTo=NULL; fileOpStruct.wFunc=FO_DELETE; fileOpStruct.fFlags=FOF_ALLOWUNDO|FOF_SIMPLEPROGRESS; fileOpStruct.hNameMappings=NULL; fileOpStruct.lpszProgressTitle=_T("正在删除文件")+m_fileName; intres=SHFileOperation(&fileOpStruct); if(fileOpStruct.fAnyOperationsAborted) {AfxMessageBox(_T("删除被取消了"));} else { if(res!=0) { AfxMessageBox(_T("删除失败,请检查文件是否可以删除!")); } else { m_wndShellList.Refresh(); if(isDir) { m_wndShellList.GetCurrentFolder(strTem1); m_wbdShellTree.Refresh(); m_wbdShellTree.SelectPath(strTem1); } } }}//刷新功能代码实现voidCFileMangementView::OnMyEditReshow(){ //TODO:在此添加命令处理程序代码 m_wndShellList.Refresh();}//复制功能代码实现voidCFileMangementView::OnEditCopy(){ //TODO:在此添加命令处理程序代码 m_isCopy=true;m_fileCopyName=m_fileName;m_isCut=false;}//粘贴功能代码实现voidCFileMangementView::OnEditPaste(){ //TODO:在此添加命令处理程序代码 CStringm_filePasteName; m_wndShellList.GetCurrentFolder(m_filePasteName); if(m_fileCopyName.Find(m_filePasteName)+1&&m_fileCopyName.ReverseFind('\\')==(m_filePasteName.GetLength())) {AfxMessageBox(_T("当前已有此文件"));return;} if(m_isCopy) { boolisDir=false; if(::GetFileAttributes(m_fileCopyName)&FILE_ATTRIBUTE_DIRECTORY) {isDir=true;} CStringstrTem1;strTem1=m_fileCopyName; strTem1.Insert(strTem1.GetLength()+1,_T('\0')); m_filePasteName.Insert(m_filePasteName.GetLength()+1,_T('\0')); fileOpStruct.hwnd=NULL; fileOpStruct.pFrom=strTem1; fileOpStruct.pTo=m_filePasteName; fileOpStruct.wFunc=FO_COPY; fileOpStruct.fFlags=FOF_ALLOWUNDO|FOF_SIMPLEPROGRESS; fileOpStruct.hNameMappings=NULL; fileOpStruct.lpszProgressTitle=_T("正在复制文件")+m_fileCopyName; intres=SHFileOperation(&fileOpStruct); if(fileOpStruct.fAnyOperationsAborted) {AfxMessageBox(_T("复制被取消了"));} else { if(res!=0) {AfxMessageBox(_T("复制失败,请检查文件是否可以复制!")); } else { m_wndShellList.Refresh();m_isCopy=0; if(isDir) { m_wndShellList.GetCurrentFolder(m_filePasteName); m_wbdShellTree.Refresh(); m_wbdShellTree.SelectPath(m_filePasteName); } } } } elseif(m_isCut) { boolisDir=false; if(::GetFileAttributes(m_fileCutName)&FILE_ATTRIBUTE_DIRECTORY) {isDir=true;} CStringstrTem1;strTem1=m_fileCutName; strTem1.Insert(st

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论