当前位置:文档之家› 操作系统实验指导书2013原件

操作系统实验指导书2013原件

实验一熟悉Windows2000/XP中的进程和线程一、实验目的1、熟悉Windows2000/XP中任务管理器的使用。

2、通过任务管理器识别操作系统中的进程和线程的相关信息。

二、实验内容与步骤1、启动操作系统自带的任务管理器:方法:直接按组合键Ctrl+Alt+Del,或者是在点击任务条上的“开始”“运行”,并输入“taskmgr.exe”。

如下图所示:2、调整任务管理器的“查看”中的相关设置,显示关于进程的以下各项信息,并完成下表(填满即可):表一:统计进程的各项主要信息3、从桌面启动办公软件“Word”,在任务管理器中找到该软件的登记,并将其结束掉。

再从任务管理器中分别找到下列程序:winlogon.exe、csrss.exe,试着结束它们,观察到的反应是,原因是。

在任务管理器中找到进程“explorer.exe”,将之结束掉,并将桌面上你打开的所有窗口最小化,看看你的计算机系统起来什么样的变化、得到的结论是(说出explorer.exe进程的作用)。

实验二Windows编程_GUI应用程序一、实验目的利用C++ 编译器创建一个GUI应用程序,代码中包括了WinMain() 方法,这是GUI类型的应用程序的标准入口点。

二、实验内容与步骤步骤1:运行Visual C++ 6.0,在“文件”菜单中依次点击“新建”-“工程”-“Win32 Application”命令,输入工程名,例如“1”,点击“确定”进入下一个对话框,选择“An simple Win32 Application”,点击“完成”按钮,将建立一个GUI 应用工程。

步骤2:在工作区点击“FileView”,双击“1.cpp”,将清单1中的程序键入1.cpp 中。

注:有的代码已经由VC++自动生成,用户只要添加必要的代码即可。

// 1.cpp : Defines the entry point for the application.#include "windows.h"int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){// TODO: Place code here.::MessageBox(NULL, // 没有父窗口"Hello, Windows xp", // 消息框中的文本"Greetings", // 消息框标题MB_OK) ; // 其中只有一个OK按钮// 返回0以便通知系统不进入消息循环return 0;}关于1.cpp的一些说明:/*///////////////////////////////////////////////////////////////////////////////////APIENTRY: 表示是windows的mian函数的入口,实际上APIENTRY是个宏,其定义为#define APIENTRY WINAPI而WINAPI也是个宏,其定义为#define WINAPI __stdcall这是个关于调用时压栈顺序的修饰符,表示参数压栈的顺序先压第一个参数,接下来是第二个,依此类推。

当然,定义回调函数也可以用APIENTRY////////////////////////////////////////////////////////////////////////////WinMain函数的定义WinMain函数的原型声明如下:int WINAPI WinMain(HINSTANCE hInstance, // handle to current instanceHINSTANCE hPrevInstance, // handle to previous instanceLPSTR lpCmdLine, // command lineint nCmdShow // show state);WinMain函数接收4个参数,这些参数都是在系统调用WinMain函数时,传递给应用程序的。

第一个参数hInstance表示该程序当前运行的实例的句柄,这是一个数值。

当程序在Windows下运行时,它唯一标识运行中的实例(注意,只有运行中的程序实例,才有实例句柄)。

一个应用程序可以运行多个实例,每运行一个实例,系统都会给该实例分配一个句柄值,并通过hInstance参数传递给WinMain函数。

第二个参数hPrevInstance表示当前实例的前一个实例的句柄。

通过查看MSDN 我们可以知道,在Win32环境下,这个参数总是NULL,即在Win32环境下,这个参数不再起作用。

第三个参数lpCmdLine是一个以空终止的字符串,指定传递给应用程序的命令行参数。

例如:在D盘下有一个sunxin.txt文件,当我们用鼠标双击这个文件时将启动记事本程序(notepad.exe),此时系统会将D:\sunxin.txt作为命令行参数传递给记事本程序的WinMain函数,记事本程序在得到这个文件的全路径名后,就在窗口中显示该文件的内容。

要在VC++开发环境中向应用程序传递参数,可以单击菜单【Project】→【Settings】,选择“Debug”选项卡,在“Program arguments”编辑框中输入你想传递给应用程序的参数。

第四个参数nCmdShow指定程序的窗口应该如何显示,例如最大化、最小化、隐藏等。

这个参数的值由该程序的调用者所指定,应用程序通常不需要去理会这个参数的值。

//LPSTR lpCmdLine lp前缀代表长指针。

也可改为PSTR lpCmdLine,都是同一种类型,作为指向字符串的指针。

//另外前缀i 表示int,sz表示以零结束的字符串。

// #define WINAPI _stdcall 该语句指定一个约定,包括如何生成机器代码以及在堆栈中放置函数调用的参数,//许多Windows函数调用声明为WINAPI//HINSTANCE hInstance 实例句柄,该句柄唯一标识该程序。

//HINSTANCE hPrevInstance Windows早期版本中,同时运行同一程序多次时,您便创建了该程序的// 多个实例。

在32位Windows版本中,该概念已被抛弃。

所以WinMain的第二个参数总是NULL(定义为0)//LPSTR lpCmdLine 用于运行程序的命令行。

某些Windows应用程序使用这个参数以在程序启动时将文件加载到内存。

//int nShowCmd 程序最初显示的方式。

可以是正常地,或者是最大地,或者是最小化显示在任务列表栏中。

///////////////////////////////////////////////////////////////////////////////////////为了显示提示信息给用户,Windows是提供了一个非常方便的API函数MessageBox给用户使用,使用这个API函数可以显示简单的文字信息出来,提醒或提示用户进行下一步操作。

函数声明如下:WINUSERAPIintWINAPIMessageBoxA(__in_opt HWND hWnd,__in_opt LPCSTR lpText,__in_opt LPCSTR lpCaption,__in UINT uType);WINUSERAPIintWINAPIMessageBoxW(__in_opt HWND hWnd,__in_opt LPCWSTR lpText,__in_opt LPCWSTR lpCaption,__in UINT uType);#ifdef UNICODE#define MessageBox MessageBoxW#else#define MessageBox MessageBoxA#endif // !UNICODE从上面可以看出,Windows的API是两种声明,一种是使用到ANSI编码,一种是使用到UNICODE编码的API函数。

通过宏定义把这两种API名称统一到MessageBox的声明。

这是一种使用选择不同API的技术,在今后的编程里,大多数都需要使用UNICODE编码了,因为可以适应不同国家的语言显示,可以国际化编程,特别对于中文支持更加需要UNICODE编程。

下面来解释一下参数的定义:hWnd是指向父窗口的句柄,如果没有父窗口,可以把这个参数设置为NULL。

lpText是需要显示的文字。

显示字符串的起始地址。

lpCaption是在窗口上标题显示。

uType是窗口组合按钮和显示图标的类型。

后面再详细说明。

返回值是一个整数,如果有取消按钮,并且按下ESC键就返回IDCANCEL。

如果有其它按钮,并且按下,就返回相应的值。

主要的值如下:IDABORT 放弃按钮IDCANCEL取消按钮IDCONTINUE 继续按钮IDIGNORE 忽略按钮IDNO 否按钮IDOK 确定按钮IDRETRY 重试按钮IDTRYAGAIN 重试按钮IDYES 是按钮步骤3:点击”Compile”和”Build”按钮,对工程文件进行编译连接,创建1.exe文件。

如果不能顺利进行编译连接,可根据提示信息进行更正。

步骤4:点击Execute按钮,可运行程序1.exe。

运行结果:弹出图形窗口,输出的字符串:“Hello, Windows xp”,窗口标题为“Greetings”,按“OK”键结束程序的运行。

思考:可通过编辑程序修改窗口属性。

实验三 Windows中进程的创建、运行和终止一、实验目的理解Windows中进程的创建、运行和终止。

二、实验内容及步骤Windows所创建的每个进程都从调用CreateProcess() API函数开始,该函数的任务是在对象管理器子系统内初始化进程对象。

每一进程都以调用ExitProcess() 或TerminateProcess() API函数终止。

通常应用程序的框架负责调用ExitProcess() 函数。

对于C++ 运行库来说,这一调用发生在应用程序的main() 函数返回之后。

1. 创建进程CreateProcess() 调用的核心参数是可执行文件运行时的文件名及其命令行。

表1-1详细地列出了每个参数的类型和名称。

表3-1 CreateProcess() 函数的参数可以指定第一个参数,即应用程序的名称,其中包括相对于当前进程的当前目录的全路径或者利用搜索方法找到的路径;lpCommandLine参数允许调用者向新应用程序发送数据;接下来的三个参数与进程和它的主线程以及返回的指向该对象的句柄的安全性有关。

相关主题