您的当前位置:首页正文

操作系统课程设计报告(完成版)

2020-10-23 来源:榕意旅游网
XX大学计算机学院操作系统课程设计报告

XX大学课程设计报告

课程设计题目: Windows系统资源管理器与任务管理器

学 院: 专业班级: 年 级: 2008级 姓 名: 学 号: 完成时间: 2012 年 7 月 3 日 成 绩: 指导教师:

教务处

XX大学计算机学院操作系统课程设计报告

课程设计指导教师评定成绩表

项目 分值 优秀 (100>x≥90) 参考标准 学习态度认真,科学作风严谨,严格保证设计时间并按任务书中规定的进度开展各项工作 设计合理、理论分析与计算正确,实验数据准确,有很强的实际动手能力、经济分析能力和计算机应用能力,文献查阅能力强、引用合理、调查调研非常合理、可信 有重大改进或独特见解,有一定实用价值 结构严谨,逻辑性强,层次清晰,语言准确,文字流畅,完全符合规范化要求,书写工整或用计算机打印成文;图纸非常工整、清晰 良好 (90>x≥80) 参考标准 学习态度比较认真,科学作风良好,能按期圆满完成任务书规定的任务 设计合理、理论分析与计算正确,实验数据比较准确,有较强的实际动手能力、经济分析能力和计算机应用能力,文献引用、调查调研比较合理、可信 有较大改进或新颖的见解,实用性尚可 结构合理,符合逻辑,文章层次分明,语言准确,文字流畅,符合规范化要求,书写工整或用计算机打印成文;图纸工整、清晰 中等 (80>x≥70) 参考标准 学习态度尚好,遵守组织纪律,基本保证设计时间,按期完成各项工作 设计合理,理论分析与计算基本正确,实验数据比较准确,有一定的实际动手能力,主要文献引用、调查调研比较可信 有一定改进或新的见解 结构合理,层次较为分明,文理通顺,基本达到规范化要求,书写比较工整;图纸比较工整、清晰 及格 (70>x≥60) 参考标准 学习态度尚可,能遵守组织纪律,能按期完成任务 不及格(x<60) 参考标准 学习马虎, 纪律涣散,工作作风不严谨,不能保证设计时间和进度 设计不合 理,理论分析与计算有原则错误,实验数据不可靠,实际动手能力差,文献引用、调查调研有较大的问题 观念陈旧 评分 学习态度 15 技术水平与实际能力 设计基本合理,理论分析与计算无大错,实验数据无大错 25 有一定见解 创新 10 论文(计算书、图纸)撰写质量 50 结构基本合理,逻辑基本清楚,文字尚通顺,勉强达到规范化要求;图纸比较工整 内容空泛, 结构混乱,文字表达不清,错别字较多,达不到规范化要求;图纸不工整或不清晰 指导教师评定成绩:

指导教师签名: 年 月 日

I

XX大学计算机学院操作系统课程设计报告

重庆大学本科学生课程设计任务书

课程设计题目 Windows系统资源管理器与任务管理器 学院 计算机 专业 网络工程 年级 09 已知参数和设计要求: (1) 熟悉操作系统资源管理原理,掌握编程接口,能够使用高级语言调用编程接口,设计并实现Windows操作系统资源管理器的全部功能(包括:菜单、图标、右键菜单),实现软件资源和数据资源的管理。 (2) 掌握操作系统任务与进程概念,熟悉任务与进程管理的方法,通过高级语言编程接口设计并实现Windows操作系统任务管理器的全部功能(包括:菜单、右键菜单、应用程序管理、进程管理、性能显示、联网状态和用户信息)。 学生应完成的工作: (1) 了解Windows操作系统的发展历史 (2) 了解Windows XP的体系结构 (3) 掌握Windows系统API的调用方法 (4) 设计并实现Windows操作系统资源管理器的全部功能(包括:菜单、图标、右键菜单),实现软件资源和数据资源的管理。 (5) 设计并实现Windows操作系统任务管理器的全部功能(包括:菜单、右键菜单、应用程序管理、进程管理、性能显示、联网状态和用户信息)。 目前资料收集情况(含指定参考资料): (1) 在互联网上收集相关资料 (2) William Stallings,Operating Systems Internals and Design Principles,6th Edition,电子工业出版社,2010年 课程设计的工作计划: (1) (2) (3) (4) (5) (6) 第1—第3天:查询、收集资料,学习相关知识; 第4天:熟悉掌握API函数使用; 第5—第9天:设计、实现程序; 第10天:编写课程设计报告; 第11天:检查程序; 第12天:修改完善程序与课程设计报告。 任务下达日期2012年6月18日 完成日期2012年7月7日

II

XX大学计算机学院操作系统课程设计报告

目录

摘要 ........................................................................................................................................... 1 第一章 第二章

课程设计要求 ........................................................................................................ 2 设计概要 ................................................................................................................ 3

2.1功能设计 ........................................................................................................................ 3 2.2程序系统功能模块 ........................................................................................................ 3 2.2.1 Windows任务管理器功能模块 ............................................................................ 3 2.2.2 Windows资源管理器功能模块 ............................................................................ 4 2.3功能分析 ...................................................................................................................... 4 2.3.1 Windows任务管理器功能流程图 ........................................................................ 4 2.3.2 Windows资源管理器功能流程图 ........................................................................ 5 2.3.3 Windows任务管理器界面截图 ............................................................................ 6 2.3.4 Windows资源管理器界面截图 ............................................................................ 8 2.3.5 程序主要功能说明 ........................................................................................... 11 第三章调试分析与测试结果 ................................................................................................. 34 3.1 Windows任务管理器 .................................................................................................. 34 3.1.1基本界面 .............................................................................................................. 34 3.1.2 进程状态查看 ..................................................................................................... 35 3.1.3 CPU状态查看 ...................................................................................................... 36 3.1.4 进程管理功能 ..................................................................................................... 36 3.2 Windows资源管理器 .................................................................................................. 39 3.2.1 基本界面 ............................................................................................................. 39 3.2.2 剪切功能的实现 ................................................................................................. 41 3.2.3 复制功能的实现 ................................................................................................. 42 3.2.4 删除功能的实现 ................................................................................................. 43 第四章 第五章

设计总结 .............................................................................................................. 44 参考文献 .............................................................................................................. 45

III

XX大学计算机学院操作系统课程设计报告

摘 要

操作系统是一个介于软件和硬件之间的特殊硬件,一方面分配硬件资源另一方面支持软件在它上面的实现,如何实时地监控和掌握系统软硬件工作的状态、资源分配和使用的情况,对计算机用户而言十分重要,于是就有了任务管理器这样的实时监控窗口;同理,我们也需要掌握计算机硬件设备的工作状态,掌握其如何存储文件、分配硬盘资源等,这也是我们做资源管理器的初衷。

我们的电脑需要我们去了解它的运行状况,掌握和管理它的进程,并对其异常情况给予操作和控制,任务管理器就像是我们了解和控制自己电脑运作的一个窗口,通过这个窗口我们可以了解到电脑所有进程运行状况,并对运行的进程加于管理和控制,正如在本实验中,启动进程管理器后,可以通过”获取进程”功能来获得本计算机启动的进程,以及与该进程相关的信息,其中包括的信息有:进程映像名称,进程开启的线程数,进程的PID以及进程的优先数,我们可以通过这些信息来了解计算机中每个进程的使用状况。同时我们可以在进程管理器上选中一个要终止的的进程,点击“终止进程”功能按钮,该进程被终止执行并退出进程列表,其中还包括了自动刷新的功能,此按钮实现的功能正如我们电脑任务管理器的“进程”功能,当电脑执行程序不能通过关闭窗口进行正常的关闭时,可以借助此办法来关闭进程。我们还可以通过这个进程管理器来启动新的进程,当我们要在进程管理器里启动新的进程时,只要点击“启动新进程”按键,则会弹出“打开进程”对话框,我们可以通过对话框里的“浏览”窗口选择要打开的新进程,这是任务管理器里没有实现的功能,通过这个功能我们在管理计算机时变得更加灵活方便,也使进程管理的功能更加完善。在退出此进程管理器时候,只要选择“退出”功能按钮则可关闭进程管理器,快速退出管理器的界面。本管理器设计比较简洁,操作灵活,使用简单,可以为我们管理和控制计算机的进程提供了一个简便的方法,是我们控制本计算机进程和了解计算机进程情况的良好助手。

关键词:任务管理器 资源管理器 操作系统

1

XX大学计算机学院操作系统课程设计报告

第一章 课程设计要求

题目名称:Windows系统资源管理器与任务管理器

题目类型:设计型

课程设计目的:熟悉操作系统资源管理原理,掌握编程接口,能够使用高级语言调用编程

接口,设计并实现Windows操作系统资源管理器和任务管理器的全部功能。

已知参数和设计要求:

(3) 熟悉操作系统资源管理原理,掌握编程接口,能够使用高级语言调用编程接口,设计

并实现Windows操作系统资源管理器的全部功能(包括:菜单、图标、右键菜单),实现软件资源和数据资源的管理;

(4) 掌握操作系统任务与进程概念,熟悉任务与进程管理的方法,通过高级语言编程接口

设计并实现Windows操作系统任务管理器的全部功能(包括:菜单、右键菜单、应用程序管理、进程管理、性能显示、联网状态和用户信息)。

实验内容:

(6) 了解Windows操作系统的发展历史; (7) 了解Windows XP的体系结构; (8) 掌握Windows系统API的调用方法;

(9) 设计并实现Windows操作系统资源管理器的全部功能(包括:菜单、图标、右键菜单),

实现软件资源和数据资源的管理;

(10)设计并实现Windows操作系统任务管理器的全部功能(包括:菜单、右键菜单、应用程

序管理、进程管理、性能显示、联网状态和用户信息)。

2

XX大学计算机学院操作系统课程设计报告

第二章 设计概要

2.1功能设计

本项目是为了实现模拟Windows系统任务管理器和资源管理器。项目的分析及功能设计要求如下:

(1) 编程模拟实现Windows系统任务管理器和资源管理器两个应用程序; (2) 服务器端可以对文件进行管理,包括上传,下载,删除文件,重命名等; (3) 客服端可以实现文件的上传、下载以及查看服务器下默认目录的文件列表; (4) 在程序中应用多线程来实现多个客户端同时对一个服务器端进行请求操作。

2.2程序系统功能模块

2.2.1 Windows任务管理器功能模块

Windows任务管理器 图2.1 进程数 进程、应用程序状态 实时状态监控 CPU状态 内存使用状态 当前用户状态 文件 选项 功能设计 查看 关机 帮助 进程 新建任务、退出管理器 总在最前 立即刷新、小图标、详细列关机、注销 关于 新建、切换进程、关闭进程 3

XX大学计算机学院操作系统课程设计报告

2.2.2 Windows资源管理器功能模块 目录树 Windows资源管理器

图2.2

文件名 资源状态显示 文件大小 文件类型 修改时间 新建、打开、保存、另存为、最近的文件、退出 撤销、剪切、粘贴、复制 文件 功能设计 编辑 视图 工具栏和停靠窗口 应用程序外观 状态栏 帮助 关于 2.3功能分析

2.3.1 Windows任务管理器功能流程图

4

XX大学计算机学院操作系统课程设计报告

图2.3

2.3.2 Windows资源管理器功能流程图

用户操作 鼠标

图2.4

资源文件 资源数据 鼠标事件 鼠标事消息 件处理 控件消息 资源管理器控制系统 显示数据 显示操作效果 5

XX大学计算机学院操作系统课程设计报告

2.3.3 Windows任务管理器界面截图

整体界面

6

XX大学计算机学院操作系统课程设计报告

不同状态显示的截图

7

XX大学计算机学院操作系统课程设计报告

2.3.4 Windows资源管理器界面截图

1、 整体界面:

2、功能界面展示:

8

XX大学计算机学院操作系统课程设计报告

“文件”功能展示

“编辑”功能展示

9

XX大学计算机学院操作系统课程设计报告

“视图”功能展示

“帮助”功能展示

10

XX大学计算机学院操作系统课程设计报告

2.3.5 程序主要功能说明

一、Windows任务管理器主要功能代码实现:

'获得进程代码实现 Public Sub ListProcess() On Error Resume Next

Dim i As Long, j As Long, n As Long Dim proc As PROCESSENTRY32 Dim snap As Long

Dim exename As String '应用程序名 Dim item As ListItem

Dim lngHwndProcess As Long

Dim lngModules(1 To 200) As Long Dim lngCBSize2 As Long Dim lngReturn As Long

Dim strModuleName As String

Dim pmc As PROCESS_MEMORY_COUNTERS Dim WKSize As Long

Dim strProcessName As String

Dim strComment As String '装载进程注释的字符串 Dim ProClass As String '程序的类名

'开始进程循环

snap = CreateToolhelpSnapshot(TH32CS_SNAPall, 0) proc.dwSize = Len(proc) theloop = ProcessFirst(snap, proc) i = 0 n = 0

While theloop <> 0 i = i + 1

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

lngHwndProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, proc.th32ProcessID)

If lngHwndProcess <> 0 Then

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

lngReturn = EnumProcessModules(lngHwndProcess, lngModules(1), 200, lngCBSize2) If lngReturn <> 0 Then

'返回特定数目空格的 strModuleName = Space(MAX_PATH)

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

lngReturn = GetModuleFileNameExA(lngHwndProcess, lngModules(1), strModuleName, 500) strProcessName = Left(strModuleName, lngReturn) strProcessName = CheckPath(Trim$(strProcessName)) If strProcessName <> \"\" Then

11

0, XX大学计算机学院操作系统课程设计报告

'判断ITEM是否已经存在 j = HaveItem(proc.th32ProcessID) If j = 0 Then '如果没有该进程 '获取短文件名

exename = Dir(strProcessName, vbNormal Or vbHidden Or vbReadOnly Or vbSystem) If exename = \"hh.exe\" Then

'MsgBox SetProClass(proc.th32ProcessID, IDLE_PRIORITY_CLASS) End If

'添加进程item

Set item = 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 '计算占用内存 If CLng(List1.ListItems.item(j).SubItems(3)) <> WKSize Then List1.ListItems.item(j).SubItems(3) = WKSize & \" K\"

'获得进程的类名

ProClass = GetProClass(proc.th32ProcessID) If ProClass <>List1.ListItems.item(j).SubItems(5) Then List1.ListItems.item(j).SubItems(5) = ProClass End If End If End If End If

theloop = ProcessNext(snap, proc) Wend

12

XX大学计算机学院操作系统课程设计报告

CloseHandle snap

'显示总进程数 Label3 If i <> ProCount Then

Label3.Caption = \"进程数:\" & i ProCount = i End If

If n <> RamUse Then '这里的\"130\"是后来加上去的.是为了和系统自带的数值一样 Label5.Caption = Val(FormatLng(n)) + 130 & \"MB\" RamUse = n

For i = 950 To Val(FormatLng(n)) + 400 Step -90 rampic.Line (0, i)-Step(1200, 20), &HFF00&, BF Next i End If End Sub

'调用系统的\"关于\"窗 Private Sub about_Click() On Error Resume Next

ShellAbout Me.hwnd, App.Title, \"谭建&文程&张源\End Sub

'退出本程序员

Private Sub close_Click() tmrRefresh.Enabled = False Unload Me End Sub

Private Sub CloseSystem_Click() tmrRefresh.Enabled = False Unload Me End Sub

'应用程序切换程序

Private Sub cmdSwitch_Click() Dim hwnd As Long Dim X As Long

Dim lngWW As Long

If LstApp.ListIndex < 0 Then Beep: Exit Sub

hwnd = LstApp.ItemData(LstApp.ListIndex) '取得窗口的结构信息

lngWW = GetWindowLong(hwnd, GWL_STYLE) If lngWW And WS_MINIMIZE Then '控制窗口的可见性

X = ShowWindow(hwnd, SW_RESTORE)

13

XX大学计算机学院操作系统课程设计报告

End If

'指定一个窗口新的位置 '第2个参数:将窗口置于Z序列的顶部. X = SetWindowPos(hwnd, HWND_TOP, 0, 0, 0, 0, _

SWP_NOMOVE Or SWP_NOSIZE Or SWP_SHOWWINDOW) End Sub '保持当前位置或保持当前大小或显示窗口

'弹出\"新建任务\"窗

Private Sub Command1_Click() frmnew.Show vbModal End Sub

'结束应用程序

'还有就是在如果列表中没有活动程序,点击\"结束程序\"会退出本身 Private Sub Command3_Click() On Error Resume Next

'If LstApp.ListCount = 0 Then

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

Dim lpclassname As String, lpcaption As String '程序的句柄号 Dim Handle As Long Dim Retval As Long

'先是打开要关闭的程序,其它就是将该程序显示成当前程序 Shell LstApp.Text, 1 lpclassname = LstApp.Text lpcaption = LstApp.Text '获得程序的句柄号

Handle = FindWindow(vbNullString, lpcaption) '用函数关闭应用程序

PostMessage Handle, WM_Close, 0&, 0&

'所了和列表控件一至,在这里删除列表中的该进程名 LstApp.RemoveItem LstApp.ListIndex LstApp.refresh '刷新

FindAllApps End Sub

'结束指定进程功能代码实现 Private Sub Command4_Click() On Error Resume Next

Dim i As Long, hand As Long, id As Long

If MsgBox(\"确定要结束进程 \" & List1.SelectedItem.Text & \" 吗?\vbExclamation + vbOKCancel) = vbCancel Then Exit Sub

id = CLng(List1.SelectedItem.SubItems(1)) If id <> 0 Then

14

XX大学计算机学院操作系统课程设计报告

EndPro id End If

ListProcess End Sub

Private Sub Command5_Click() Dim AboutRet As Long

AboutRet = ExitWindowsEx(EWX_LOGOFF, 0) End Sub

'注销用户功能实现

Private Sub Command6_Click() Dim AboutRet As Long

AboutRet = ExitWindowsEx(EWX_LOGOFF, 0) End Sub

'切换至功能实现

Private Sub cutoverto_Click() cmdSwitch_Click Me.WindowState = 1 End Sub

'改变进程显示方式

Private Sub Detailed_Click() List1.View = lvwReport End Sub

'结束应用程序功能实现

Private Sub endprograme_Click() Command3_Click End Sub

'关机功能实现

Private Sub Exit_Click() frmclose.Show vbModal End Sub

'CPU效率监视

CpuPicture(0).ScaleMode = vbPixels CpuPicture(1).ScaleMode = vbPixels Set QueryObject = New CCpuwatch '对象初始化

QueryObject.Initialize '打开时间控件

tmrRefresh.Enabled = True '调用刷新过程

tmrRefresh_Timer

15

XX大学计算机学院操作系统课程设计报告

'***************************************** '获得所有系统进程 ListProcess '窗体总在前

SetTop Me, front.Checked

'*************************************************** '获得系统的当前用户 cnt& = 199

s$ = String$(200, 0)

dl& = GetUserName(s$, cnt)

Set item = ListView3.ListItems.Add(, , s$, , 2) item.SubItems(2) = \"正在运行...\" item.SubItems(1) = WorkstationID '设置系统托盘

If WindowState = vbMinimized Then LastState = vbNormal Else

LastState = WindowState End If

AddToTray Me, Tray End Sub

Private Sub Form_Resize() Select Case WindowState Case vbMinimized Me.Visible = False Case vbMaximized Me.Visible = True End Select

If WindowState <> vbMinimized Then LastState = WindowState Me.Visible = True End If End Sub

Private Sub Form_Unload(Cancel As Integer) RemoveFromTray '关闭托盘 tmrRefresh.Enabled = False Unload Me End Sub

Private Sub front_Click()

front.Checked = Not front.Checked SetTop Me, front.Checked End Sub

16

XX大学计算机学院操作系统课程设计报告

Private Sub jsjc_Click() Command4_Click End Sub

Private Sub List1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader) On Error Resume Next With List1

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

If (ColumnHeader.Index - 1) = .SortKey Then .SortOrder = (.SortOrder + 1) Mod 2 .Sorted = True Else

.Sorted = False .SortOrder = 0

.SortKey = ColumnHeader.Index - 1 .Sorted = True End If End With End Sub

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

Private Sub List1_MouseDown(Button As Integer, Shift As Integer, X As Single, y As Single) On Error Resume Next

Dim j As Long, i As Long If Button = 2 Then

If List1.HitTest(X, y) Is Nothing Then Exit Sub j = List1.HitTest(X, y).Index List1.ListItems(j).Selected = True For i = 0 To 5

mnuSetProClassSub(i).Checked = False Next

Select Case List1.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 End Select

PopupMenu you End If End Sub

Private Sub log_Click() frmclose.Show vbModal

17

XX大学计算机学院操作系统课程设计报告

End Sub

'双击切换到另一个程序 Sub lstApp_DblClick() cmdSwitch.Value = True End Sub '任务窗

Function TaskWindow(hwCurr As Long) As Long Dim lngStyle As Long

'调用函数得到指定窗口的信息'第一个参数是指定窗口的句柄,第二个是窗口的样式 lngStyle = GetWindowLong(hwCurr, GWL_STYLE)

If (lngStyle And IsTask) = IsTask Then TaskWindow = True End Function

'设置进程优先级

Public Function SetProClass(ByVal PID As Long, ByVal ClassID As Long) On Error Resume Next Dim hwd As Long

'在这里得到一个句柄

hwd = OpenProcess(PROCESS_SET_INFORMATION, 0, PID) '调用这个函数设置进程的优先级 SetProClass = SetPriorityClass(hwd, ClassID) End Function '右键菜单

Private Sub LstApp_MouseDown(Button As Integer, Shift As Integer, X As Single, y As Single) If Button = 2 Then

PopupMenu Application End If End Sub

'在这里设置进程优先级

Private Sub mnuSetProClassSub_Click(Index As Integer) On Error Resume Next

Dim PID As Long, rtn As Long

PID = CLng(List1.SelectedItem.SubItems(1)) '得到进程PID If mnuSetProClassSub(Index).Checked = True Then Exit Sub Select Case Index

Case 1: rtn = SetProClass(PID, HIGH_PRIORITY_CLASS) '高 Case 2: rtn = SetProClass(PID, 32768) '较高

Case 3: rtn = SetProClass(PID, NORMAL_PRIORITY_CLASS) '标准 Case 4: rtn = SetProClass(PID, 16384) '较低 Case 5: rtn = SetProClass(PID, IDLE_PRIORITY_CLASS) '低 End Select

If rtn = 0 Then MsgBox \"无法为进程 \" & List1.SelectedItem.Text & \" 设置优先级。\End Sub

18

XX大学计算机学院操作系统课程设计报告

'弹出\"新建任务\"窗

Private Sub newfile_Click() frmnew.Show vbModal End Sub

Private Sub plaseago_Click() cmdSwitch_Click End Sub

Private Sub refresh_Click() frmclose.Show vbModal End Sub

'刷新

Private Sub refresh1_Click() FindAllApps End Sub

Private Sub showago_Click()

showago.Checked = Not showago.Checked SetTop Me, showago.Checked End Sub

Private Sub small_Click() List1.View = Index + 2 List1.Sorted = True End Sub

Private Sub SSTab1_DblClick()

End Sub

Private Sub Timer3_Timer() Dim X As Long

Call GlobalMemoryStatus(minfo) '总的内存量

X = -minfo.dwTotalPhys / 1024 Label2(0).Caption = Str$(Int(X)) '可用的内存量

X = minfo.dwAvailPhys / 1024 Label2(1).Caption = Str$(Int(X)) '系统缓存

Label2(2).Caption = -(Val(Label2(0)) - Val(Label2(1)) - 500) '虚拟内存总数

X = minfo.dwTotalVirtual / 1024

19

XX大学计算机学院操作系统课程设计报告

Label7(0).Caption = Str$(Int(X / 1024)) & \" M\" '可用虚拟内存

X = minfo.dwAvailVirtual / 1024

Label7(1).Caption = Str$(Int(X / 1024)) & \" M\" End Sub

Private Sub Timer4_Timer() Line14.X2 = Line14.X2 - 20 Line14.X1 = Line14.X1 - 20 If Line14.X1 = 0 Then Timer4.Enabled = False Else

Timer4.Enabled = True End If End Sub

Private Sub Timer6_Timer() FindAllApps End Sub

'CPU效率监视

Private Sub tmrRefresh_Timer() Dim Ret As Integer Dim cnt As Integer Dim i As Integer '返回CPU状态

Ret = QueryObject.Query cnt = Int(Ret / 10 + 1)

CpuPicture(0).Cls '清除窗口中的内容 If Ret <> -1 Then For i = 0 To cnt - 1

'用PIC控件的LINE方法在PIC上画图,用以显示CPU的占用率 CpuPicture(0).Line (2, 70 - (5 + i * 6))-(79, 70 - (5 + i * 6 + 2)), &HFF00&, BF Next i

ShiftPoints

GraphPoints(UBound(GraphPoints)) = Ret CpuPicture(1).Cls

For cnt = LBound(GraphPoints) To UBound(GraphPoints) - 1

CpuPicture(1).Line (cnt, 80 - GraphPoints(cnt))-(cnt + 1, 80 - GraphPoints(cnt + 1)), &HFF00& Next cnt

CpuLabel.Caption = CStr(Ret) + \"%\"

Label4.Caption = \"CPU 使用:\" &CStr(Ret) + \"%\" '托盘显示CPU使用率

20

XX大学计算机学院操作系统课程设计报告

SetTrayTip \"CPU 使用:\" &CStr(Ret) + \" %\" End If End Sub

'CPU效率监视 Sub ShiftPoints() Dim cnt As Integer

For cnt = LBound(GraphPoints) To UBound(GraphPoints) - 1 GraphPoints(cnt) = GraphPoints(cnt + 1) Next cnt End Sub

'判断item是否存在

Public Function HaveItem(ByVal itemID As Long) As Long On Error GoTo zbb

HaveItem = List1.ListItems(\"ID:\" & CStr(itemID)).Index Exit Function zbb:

HaveItem = 0 End Function

'结束一个进程

Public Sub EndPro(ByVal PID As Long) On Error Resume Next

Dim lngHwndProcess As Long Dim hand As Long Dim exitCode As Long

'打开要结束的进程,把该进程的句柄赋给变量

hand = OpenProcess(PROCESS_TERMINATE, True, PID) '结束进程

TerminateProcess hand, exitCode

'关闭进程的内核对象......(除非对内核对象的所有引用都已关闭,否则该对象不会实际删除) CloseHandle hand End Sub

Private Sub Timer2_Timer() CheckProcess End Sub

Private Sub Timer1_Timer() ListProcess End Sub

'将正在运行的应用程序加到列表控件中 Sub FindAllApps()

Dim hwCurr As Long Dim intLen As Long Dim strTitle As String

21

XX大学计算机学院操作系统课程设计报告

Dim item As ListItem '先清空 LstApp.Clear

'获取一个窗口的句柄 '为一个源子窗口寻找第一个兄弟(同级)窗口,或寻找第一个顶级窗口 hwCurr = GetWindow(Me.hwnd, GW_HWNDFIRST) Do While hwCurr

If hwCurr <> Me.hwnd And TaskWindow(hwCurr) Then '调查窗口标题文字或控件内容的长短 intLen = GetWindowTextLength(hwCurr) + 1 strTitle = Space$(intLen)

'取得窗体的标题(caption)文字

intLen = GetWindowText(hwCurr, strTitle, intLen) If intLen > 0 Then

LstApp.AddItem strTitle

'Set item = LstApp.ListItems.Add(, , strTitle, 3) LstApp.ItemData(LstApp.NewIndex) = hwCurr End If End If

'获取下一个窗口的句柄

hwCurr = GetWindow(hwCurr, GW_HWNDNEXT) Loop End Sub

Public Function CheckPath(ByVal PathStr As String) As String On Error Resume Next

'返回一个字符串,该字符串中指定的子字符串已被替换成另一子字符串,并且替换发生的次数也是指定的。

PathStr = Replace(PathStr, \"\\??\\\

If UCase(Left$(PathStr, 12)) = \"\\SYSTEMROOT\\\" Then PathStr = GetWinDir & Mid$(PathStr, 12) CheckPath = PathStr End Function

新建一个进程的命令 ' OpenProcess函数声明

Private Declare Function OpenProcess Lib \"kernel32\" _ (ByVal dwDesiredAccess As Long, _ ByVal bInheritHandle As Long, _ ByVal dwProcessId As Long _ ) As Long

' CloseHandle函数声明

Private Declare Function CloseHandle Lib \"kernel32\" _ (ByVal hObject As Long) As Long

Private Sub close_Click() Unload Me

22

XX大学计算机学院操作系统课程设计报告

End Sub

Private Sub cmdnew_Click() cmdialog.DialogTitle = \"浏览\"

cmdialog.Filter = \"程序|*.exe|所有文件|*.*\" cmdialog.ShowOpen

Combo1.Text = cmdialog.FileName End Sub

Private Sub cmdOK_Click() On Error GoTo err

Dim hProgram As Long '被检测的程序进程句柄 Dim X

'打开指定的程序

X = Shell(Combo1.Text, 1)

hProgram = OpenProcess(0, False, X) CloseHandle hProgram Exit Sub Unload Me err:

MsgBox \"Windows 找不到文件\" & Combo1.Text & \"。请确定文件名是否正确后,再试一次。要搜索文件,请单击[开始]按钮,然\" & Chr(13) & Chr(10) & \"后单击“搜索”。\ Combo1.SetFocus Combo1.SelStart = 0

Combo1.SelLength = Len(Combo1.Text) End Sub

Private Sub Combo1_Change() If Combo1.Text = \"\" Then cmdOK.Enabled = False Else

cmdOK.Enabled = True End If End Sub

Private Sub Form_Load() SetTop Me, True End Sub

二、Windows资源管理器主要功能代码实现:

//DoDataExchange数据动态绑定,对按钮添加变量

void CFileMangementView::DoDataExchange(CDataExchange* pDX) { CFormView::DoDataExchange(pDX);

23

XX大学计算机学院操作系统课程设计报告

DDX_Control(pDX, IDC_TREE1, m_wbdShellTree); DDX_Control(pDX, IDC_LIST1, m_wndShellList); }

//更改窗口样式的时候重写此函数

BOOL CFileMangementView::PreCreateWindow(CREATESTRUCT& cs) { // CREATESTRUCT cs 来修改窗口类或样式 return CFormView::PreCreateWindow(cs); }

//右键点击空白处功能代码实现

void CFileMangementView::OnRButtonUp(UINT nFlags, CPoint point) { ClientToScreen(&point); OnContextMenu(this, point); }

void CFileMangementView::OnContextMenu(CWnd* pWnd, CPoint point) { theApp.GetContextMenuManager()->ShowPopupMenu(IDR_POPUP_EDIT, point.x, point.y, this, TRUE); }

// CFileMangementView 诊断

#ifdef _DEBUG

void CFileMangementView::AssertValid() const { CFormView::AssertValid(); }

void CFileMangementView::Dump(CDumpContext& dc) const { CFormView::Dump(dc); }

CFileMangementDoc* CFileMangementView::GetDocument() const // 非调试版本是内联的 { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CFileMangementDoc))); return (CFileMangementDoc*)m_pDocument; }

#endif //_DEBUG

24

XX大学计算机学院操作系统课程设计报告

// CFileMangementView 消息处理程序

void CFileMangementView::OnSize(UINT nType, int cx, int cy) { CFormView::OnSize(nType, cx, cy); // TODO: 在此处添加消息处理程序代码 // LockWindowUpdate(); CRect rc; 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(); /*CRect rc2;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); }

//绘图代码实现

void CFileMangementView::OnDraw(CDC* pDC) { CRect rcClient; GetClientRect(&rcClient); //Draw3dRect实现绘制3D矩形的位置大小 pDC->Draw3dRect(0,0,rcClient.Width(),rcClient.Height(),::GetSysColor(COLOR_BTNSHADOW),::GetSysColor(COLOR_BTNHILIGHT)); }

25

XX大学计算机学院操作系统课程设计报告

//OnEraseBkgnd擦除了背景,则返回非零值;否则返回0 //true表示已处理背景刷新,false表示需要在OnDraw里处理 BOOL CFileMangementView::OnEraseBkgnd(CDC* pDC) { return true; //return CFormView::OnEraseBkgnd(pDC); }

//文件右键功能实现

void CFileMangementView::OnNMRClickList1(NMHDR *pNMHDR, LRESULT *pResult) { LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast(pNMHDR); // TODO: 在此添加控件通知处理程序代码 if (pNMItemActivate->iItem==-1) { CPoint oPoint; CMenu menu ; 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); else pSubMenu->EnableMenuItem(ID_EDIT_PASTE, MF_DISABLED | MF_GRAYED);

//在指定位置显示弹出菜单

pSubMenu->TrackPopupMenu (TPM_LEFTALIGN, oPoint.x, oPoint.y, this); } else { CPoint oPoint; CMenu menu ; GetCursorPos( &oPoint);//定位光标 menu.LoadMenu(IDR_POPUP_EDIT);//装载自定义的右键菜单,即右侧列表的右键功能 CMenu* pSubMenu;//定义下面要用到的cmenu对象 pSubMenu = menu.GetSubMenu(0);//获取第一个弹出菜单,所以第一个菜单必须有子菜单 // pSubMenu->EnableMenuItem(IDM_REMOVE_FROM_KILL_LIST, MF_DISABLED |

26

XX大学计算机学院操作系统课程设计报告

MF_GRAYED); pSubMenu->TrackPopupMenu (TPM_LEFTALIGN, oPoint.x, oPoint.y, this); //在指定位置显示弹出菜单 //menu.Detach(); //menu.DestroyMenu(); for(int i=0; i//打开指定文件代码实现

void CFileMangementView::OnOpenFile() { // TODO: 在此添加命令处理程序代码 //ShellExecute:运行一个外部程序(或者是打开一个已注册的文件、打开一个目录、打印一个文件等等),并对外部程序有一定的控制 ShellExecute(this->m_hWnd,_T(\"open\"),m_fileName,NULL,NULL, SW_SHOW ); }

//重命名

void CFileMangementView::OnMyEditRename() { // TODO: 在此添加命令处理程序代码 m_wndShellList.EditLabel(m_Item)->SetFocus(); }

//重命名功能实现

void CFileMangementView::OnLvnEndlabeleditList1(NMHDR *pNMHDR, LRESULT *pResult) { NMLVDISPINFO *pDispInfo = reinterpret_cast(pNMHDR); // TODO: 在此添加控件通知处理程序代码 bool isDir=false; if ( ::GetFileAttributes(m_fileName) & FILE_ATTRIBUTE_DIRECTORY) {isDir=true;} CString strMsg,strHint,strPre,strNxt; CString strTem1,strTem2;strTem2=strTem1=m_fileName; CString s1=pDispInfo->item.pszText; if (s1!=_T(\"\") && s1!=m_fileInName)

27

XX大学计算机学院操作系统课程设计报告

{ //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; int res=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; }

28

XX大学计算机学院操作系统课程设计报告

void CFileMangementView::OnLvnBeginlabeleditList1(NMHDR *pNMHDR, LRESULT *pResult) { NMLVDISPINFO *pDispInfo = reinterpret_cast(pNMHDR); // TODO: 在此添加控件通知处理程序代码 m_wndShellList.GetEditControl()->LimitText(30); m_wndShellList.GetEditControl()->GetWindowText(m_fileInName); *pResult = 0; }

//删除功能代码实现

void CFileMangementView::OnMyEditDel() { // TODO: 在此添加命令处理程序代码 bool isDir=false; if ( ::GetFileAttributes(m_fileName) & FILE_ATTRIBUTE_DIRECTORY) {isDir=true;} CString strTem1;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; int res=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); } }

29

XX大学计算机学院操作系统课程设计报告

} }

//刷新功能代码实现

void CFileMangementView::OnMyEditReshow() { // TODO: 在此添加命令处理程序代码 m_wndShellList.Refresh(); }

//复制功能代码实现

void CFileMangementView::OnEditCopy() { // TODO: 在此添加命令处理程序代码 m_isCopy=true;m_fileCopyName=m_fileName;m_isCut=false; }

//粘贴功能代码实现

void CFileMangementView::OnEditPaste() { // TODO: 在此添加命令处理程序代码 CString m_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) { bool isDir=false; if ( ::GetFileAttributes(m_fileCopyName) & FILE_ATTRIBUTE_DIRECTORY) {isDir=true;} CString strTem1;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; int res=SHFileOperation(&fileOpStruct); if (fileOpStruct.fAnyOperationsAborted)

30

&&

XX大学计算机学院操作系统课程设计报告

{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); } } } }

else if (m_isCut) { bool isDir=false; if ( ::GetFileAttributes(m_fileCutName) & FILE_ATTRIBUTE_DIRECTORY) {isDir=true;} CString strTem1;strTem1=m_fileCutName; 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_MOVE; fileOpStruct.fFlags=FOF_ALLOWUNDO|FOF_SIMPLEPROGRESS; fileOpStruct.hNameMappings=NULL; fileOpStruct.lpszProgressTitle=_T(\"正在移动文件\")+m_fileCopyName; int res=SHFileOperation(&fileOpStruct); if (fileOpStruct.fAnyOperationsAborted) {AfxMessageBox(_T(\"移动被取消了\"));} else { if (res!=0) {AfxMessageBox(_T(\"移动失败,请检查文件是否可以移动!\")); } else { m_wndShellList.Refresh();m_isCut=0; if ( isDir) { m_wndShellList.GetCurrentFolder(m_filePasteName);

31

XX大学计算机学院操作系统课程设计报告

m_wbdShellTree.Refresh(); m_wbdShellTree.SelectPath (m_filePasteName); } } } } }

//剪切功能代码实现

void CFileMangementView::OnEditCut() { // TODO: 在此添加命令处理程序代码 m_isCut=true;m_fileCutName=m_fileName;m_isCopy=false; }

//查看文件属性功能代码实现

void CFileMangementView::OnMyEditStatus() { // TODO: 在此添加命令处理程序代码 m_fileInName=m_wndShellList.GetItemText(m_Item,0); SYSTEMTIME stime;CString m_fileTime,m_fileStatus; HANDLE hDir = CreateFile (m_fileName, GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL); bool isDir=false; if ( ::GetFileAttributes(m_fileName) & FILE_ATTRIBUTE_DIRECTORY) {isDir=true;} if (!isDir) { DWORD m_fileSize,m_fileSize2; m_fileSize=GetFileSize(hDir,&m_fileSize2); m_fileTime.Format(_T(\"%d\"),m_fileSize); m_fileStatus+=_T(\"文件大小:\")+m_fileTime+_T(\"字节\\n\"); } FILETIME lpCreationTime; // 文件夹的创建时间 FILETIME lpLastAccessTime; // 对文件夹的最近访问时间 FILETIME lpLastWriteTime; // 文件夹的最近修改时间 // 获取文件夹时间属性信息 if (GetFileTime(hDir, &lpCreationTime, &lpLastAccessTime, &lpLastWriteTime)){ FILETIME ftime; FileTimeToLocalFileTime(&lpCreationTime, &ftime); // 转换成本地时间 FileTimeToSystemTime(&ftime, &stime); // 转换成系统时间格式 m_fileTime.Format(_T(\"创建时间:%d年%d月

32

%d

XX大学计算机学院操作系统课程设计报告

日%d:%d:%d\\n\"),stime.wYear,stime.wMonth,stime.wDay,stime.wHour,stime.wMinute,stime.wSecond); m_fileStatus+=m_fileTime; FileTimeToLocalFileTime(&lpLastWriteTime, &ftime); // 转换成本地时间 FileTimeToSystemTime(&ftime, &stime); // 转换成系统时间格式 m_fileTime.Format(_T(\"修改时间:%d年%d月%d日%d:%d:%d\\n\"),stime.wYear,stime.wMonth,stime.wDay,stime.wHour,stime.wMinute,stime.wSecond); m_fileStatus+=m_fileTime; FileTimeToLocalFileTime(&lpLastAccessTime, &ftime); // 转换成本地时间 FileTimeToSystemTime(&ftime, &stime); // 转换成系统时间格式 m_fileTime.Format(_T(\"访问时间:%d年%d月%d日\\n\"),stime.wYear,stime.wMonth,stime.wDay,stime.wHour,stime.wMinute,stime.wSecond); m_fileStatus+=m_fileTime; } CloseHandle(hDir); // 关闭打开过的文件夹 if (!m_fileStatus.IsEmpty()) {MessageBox(m_fileStatus,m_fileInName+_T(\" 属性\"),MB_OK);} }

//新建txt文本文档功能代码实现

void CFileMangementView::OnMyEditNewtxt() { // TODO: 在此添加命令处理程序代码 CString m_filePasteName; m_wndShellList.GetCurrentFolder(m_filePasteName); m_filePasteName.Insert(m_filePasteName.GetLength(),_T(\"\\\\新建文本文档.txt\")); HANDLE hDir = CreateFile (m_filePasteName, GENERIC_WRITE,0,NULL, CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL, NULL); if (hDir == INVALID_HANDLE_VALUE) { AfxMessageBox(_T(\"创建文本文档失败,请检查原因!\")); } else m_wndShellList.Refresh(); }

//右侧列表功能代码实现

void CFileMangementView::OnLvnItemchangedList1(NMHDR *pNMHDR, LRESULT *pResult) { LPNMLISTVIEW pNMLV = reinterpret_cast(pNMHDR); // TODO: Add your control notification handler code here *pResult = 0;

33

XX大学计算机学院操作系统课程设计报告

}

//左侧列表功能代码实现

void CFileMangementView::OnTvnSelchangedTree1(NMHDR *pNMHDR, LRESULT *pResult) { LPNMTREEVIEW pNMTreeView = reinterpret_cast(pNMHDR); // TODO: Add your control notification handler code here *pResult = 0; }

第三章 调试分析与测试结果

3.1 Windows任务管理器

3.1.1基本界面

基本显示界面

34

XX大学计算机学院操作系统课程设计报告

Windows自带任务管理器界面

3.1.2 进程状态查看

35

XX大学计算机学院操作系统课程设计报告

3.1.3 CPU状态查看

可以查看当前系统CPU使用的情况、内存使用情况

3.1.4 进程管理功能

1、结束一个任务,选择其中一个想要结束的任务,如下图所示:

36

XX大学计算机学院操作系统课程设计报告

点击“结束任务”后,再次查看当前的应用程序

发现该应用程序确实被关闭。

2、新建一个任务:

选择要打开的任务:

37

XX大学计算机学院操作系统课程设计报告

点击“打开”后,发现程序“utorrent.exe”已经运行:

3、关机功能的实现

38

XX大学计算机学院操作系统课程设计报告

点击“关闭”之后,弹出关闭对话框,实现关机等功能:

3.2 Windows资源管理器

3.2.1 基本界面

39

XX大学计算机学院操作系统课程设计报告

自己实现的资源管理器界面

Windows自带的资源管理器界面

40

XX大学计算机学院操作系统课程设计报告

3.2.2 剪切功能的实现

如图所示,对“卡夫卡变形记.txt”进行剪切操作:

现在我们把目标文件剪切到目标文件夹中:

41

XX大学计算机学院操作系统课程设计报告

3.2.3复制功能的实现

我们接下来实现复制功能,把目标文件“豌豆荚2”复制到“截图/新建文件夹”中去:

如图所示,目标文件已经被复制到目标文件目录:

42

XX大学计算机学院操作系统课程设计报告

3.2.4删除功能的实现

删除功能是我们日常操作中经常使用到的功能,接下来我们就来演示删除“豌豆荚2”这个文件的操作:

点击“删除”按钮后,弹出如下对话框:

选择“是”,成功删除该文件:

43

XX大学计算机学院操作系统课程设计报告

第四章 设计总结

经过一个星期的课程设计,终于完成了任务管理器和资源管理起,我们小组从一个从未接触过MFC的新手到现在对MFC有了一定程度的了解,在此期间,我上网查阅了相关的资料,看网上视频教程和查阅图书馆的相关书籍,并在一些同学的帮助下,终于完成了这份粗糙的作品。通过这次课程设计中,我学到了很多关于MFC的只是,同时也对VC++有了更深的认识,并对编程有了新的看法。当然,在此过程中我也遇到了很多问题,有的问题经过研究科最终被解决了,有的问题却仍然存在,以下是我做这个实验遇到的问题,以及一些解决的方法:

第一、通过本次试验,在“启动新进程”的实现函数里调用了MultiByteToWideChar,表示把多字节字符转为宽字节字符,它跟WideCharToMultiByte()函数(宽字节字符转为多字节字符)极容易混淆,实际上MultiByteToWideChar和WideCharToMultiByte是互逆的过程,MultiByteToWideChar是将普通字符串转化为Unicod,而WideCharToMultiByte正好相反。它们的操作过程相类似,在使用时首先要申请数组空间,然后分配响应的数组空间,接着是进

44

XX大学计算机学院操作系统课程设计报告

行字符间的转换了,最后还要释放所占用的内存 。这两个函数的缺点在于无法动态分配内存,在转换很长的字符串时可能会浪费较多内存空间,优点是在不考虑浪费空间的情况下转换较短字符串非常方便。

第二、在窗体界面美化方面。窗体的美化方法有很多,可以在PushButton控件中美化,可以在GroupButton控件中美化,可以在Edit控件中美化,在Static控件中美化等等,本系统是在PushButton控件中美化的,自定义一个基于Cbutton的子类 CSXButton,在CSXButton函数里对整个BUTTON控件进行绘制。

此次课程设计由于时间和技术的问题,有很多地方还做得不够好,存在很多不足,有很地方还需要改进,在程序的设计方面。因为对MFC和VC++编程不太熟悉,在做设计的过程中遇到了很多问题,耗费了很多时间在代码的修改和调试上,还有很多界面的设置不能如愿实现,今后应在程序的编写上下苦功,不断加强自己的编程的能力。

第五章 参考文献

William Stallings,Operating Systems Internals and Design Principles,6th Edition,电子工业出版社,2010年

《计算机操作系统(修订版)》汤子瀛西安电子科技大学出版社 2012年

《操作系统考研辅导教程(计算机专业研究生入学考试全真题解) 》电子科技大学出版社 2011年

45

因篇幅问题不能全部显示,请点此查看更多更全内容