课程设计综合实验报告科院_第1页
课程设计综合实验报告科院_第2页
课程设计综合实验报告科院_第3页
课程设计综合实验报告科院_第4页
课程设计综合实验报告科院_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

1、.科 技 学 院课程设计报告( 20112012年度第 2 学期)名 称: Windows体系编程 题 目: 课内综合实验 院 系: 科技学院信息工程系班 级: 软件09K2 学 号: 091909020221 学生姓名: 彭 奇 指导教师: 王新颖 实验学时: 12学时 成 绩: 日期: 2012 年 5 月 29 日.;实验一 类windows进程任务管理器实验一、课程设计的目的与要求目的:理解Windows编程环境下的进程管理机制,能创建一个完成特定功能的进程,并能对进程进行信息的获取、终止和保护,实现一个类Windows的进程任务管理器。要求:1. 编写一段程序,能够完成创建进程的功能

2、,要求启动windows记事本程序(notepad.exe),同时打开一个文本文件,路径为:c:systemuser.log 。并打印出新建进程ID。2. 获取当前系统进程信息,打印输出进程名称和ID号。3. 终止任意进程并获取退出代码。二、设计正文#include "stdafx.h"#include <windows.h>#include <stdio.h>#include <tlhelp32.h> / 声明快照函数的头文件BOOL TerminateProcessFromId(DWORD dwId)BOOL bRet = FALSE

3、;/ 打开目标进程,取得进程句柄HANDLE hProcess = :OpenProcess (PROCESS_ALL_ACCESS, FALSE, dwId); /PROCESS_ALL_ACCESS:所有权限,包括创建、读、写等。/OpenProcess如果成功,则该进程内核对象引用计数+1if(hProcess != NULL)bRet = :TerminateProcess(hProcess, 0);CloseHandle(hProcess);/结束了进程,还要使该进程内核对象引用计数-1return bRet;int main(int argc, char* argv)char sz

4、CommandLine = "notepad "STARTUPINFO si = sizeof(si) ;PROCESS_INFORMATION pi;si.dwFlags = STARTF_USESHOWWINDOW;/ 指定wShowWindow成员有效si.wShowWindow = TRUE;/ 此成员设为TRUE的话则显示新建进程的主口, / 为FALSE的话则不显示BOOL bRet = :CreateProcess (NULL,/ 不在此指定可执行文件的文件名szCommandLine,/ 命令行参数NULL,/ 默认进程安全性NULL,/ 默认线程安全性FA

5、LSE,/ 指定当前进程内的句柄不可以被子进程继承CREATE_NEW_CONSOLE,/ 为新进程创建一个新的控制台窗口NULL,/ 使用本进程的环境变量NULL,/ 使用本进程的驱动器和目录&si,&pi);if(bRet)/ 既然我们不使用两个句柄,最好是立刻将它们关闭:CloseHandle (pi.hThread);:CloseHandle (pi.hProcess);printf(" 新进程的进程ID号:%d n", pi.dwProcessId);printf(" 新进程的主线程ID号:%d n", pi.dwThreadI

6、d);PROCESSENTRY32 pe32;/ 在使用这个结构之前,先设置它的大小pe32.dwSize = sizeof(pe32); / 给系统内的所有进程拍一个快照HANDLE hProcessSnap = :CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);if(hProcessSnap = INVALID_HANDLE_VALUE)printf(" CreateToolhelp32Snapshot调用失败! n");return -1;BOOL bMore = :Process32First(hProcessSnap

7、, &pe32);/ 遍历快照,轮流显示每个进程的信息while(bMore)printf(" 进程名称:%s n", pe32.szExeFile);printf(" 进程ID号:%u nn", pe32.th32ProcessID);bMore = :Process32Next(hProcessSnap, &pe32);/ 不要忘记清除掉snapshot对象:CloseHandle(hProcessSnap);DWORD dwId;printf(" 请输入您要终止的进程的ID号: n");scanf("%

8、u", &dwId);if(TerminateProcessFromId(dwId)printf(" 终止进程成功! n");elseprintf(" 终止进程失败! n");return 0;实验结果: 实验二 窗口与DLL实验一、实验目的与要求: 目的:了解windows窗口程序的结构与特点,了解windows程序中至关重要的消息机制,包括消息的定义、消息循环以及消息相应函数。熟悉基本的WINAPI,了解DLL的使用方法。 要求:1.利用WIN32API编写WinMain函数,完成窗口类的注册,窗口的创建,显示,更新,并完成消息循环

9、过程。2.利用windows API实现窗口过程函数LRESULT CALLBACK WinProc( ),对WM_CHAR、WM_PAINT、WM_CLOSE、WM_DESTROY消息进行响应,并对默认消息进行响应。其中,对WM_PAINT的响应要完成窗口重绘,WM_CLOSE响应完成关闭窗口,WM_DESTROY完成销毁应用程序。3.在对WM_LBUTTONDOWN消息函数中,通过调用DLL完成对该消息的响应,实现弹出显示鼠标点击位置对话框的功能。二、设计正文#include <stdio.h>#include "stdafx.h"/ 窗口函数的函数原形LR

10、ESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)char szClassName = "MainWClass"WNDCLASSEX wndclass;/ 用描述主窗口的参数填充WNDCLASSEX结构wndclass.cbSize = sizeof(wndclass);/ 结构的大小wndclass.style = CS_

11、HREDRAW|CS_VREDRAW;/ 指定如果大小改变就重画wndclass.lpfnWndProc = MainWndProc;/ 窗口函数指针wndclass.cbClsExtra = 0;/ 没有额外的类内存wndclass.cbWndExtra = 0;/ 没有额外的窗口内存wndclass.hInstance = hInstance;/ 实例句柄 wndclass.hIcon = :LoadIcon(NULL, IDI_APPLICATION);/ 使用预定义图标wndclass.hCursor = :LoadCursor(NULL,IDC_ARROW);/ 使用预定义的光标wn

12、dclass.hbrBackground = (HBRUSH):GetStockObject(WHITE_BRUSH);/ 使用白色背景画刷wndclass.lpszMenuName = NULL;/ 不指定菜单wndclass.lpszClassName = szClassName ;/ 窗口类的名称wndclass.hIconSm = NULL;/ 没有类的小图标/ 注册这个窗口类:RegisterClassEx(&wndclass); / 创建主窗口HWND hwnd = :CreateWindowEx( 0,/ dwExStyle,扩展样式szClassName,/ lpCla

13、ssName,类名"My first Window!",/ lpWindowName,标题WS_OVERLAPPEDWINDOW,/ dwStyle,窗口风格CW_USEDEFAULT,/ X,初始 X 坐标CW_USEDEFAULT,/ Y,初始 Y 坐标CW_USEDEFAULT,/ nWidth,宽度CW_USEDEFAULT,/ nHeight,高度NULL,/ hWndParent,父窗口句柄NULL,/ hMenu,菜单句柄hInstance,/ hlnstance,程序实例句柄NULL) ;/ lpParam,用户数据if(hwnd = NULL):Messa

14、geBox(NULL, "创建窗口出错!", "error", MB_OK);return -1;/ 显示窗口,刷新窗口客户区:ShowWindow(hwnd, nCmdShow);:UpdateWindow(hwnd);/ 从消息堆中取出消息MSG msg;while(:GetMessage(&msg,NULL, 0, 0)/ 转化键盘消息:TranslateMessage(&msg);/ 将消息发送到相应的窗口函数:DispatchMessage(&msg);/ 当GetMessage返回0时程序结束return msg.wP

15、aram;LRESULT CALLBACK MainWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)char szText = "最简单的窗口程序!"switch (message) case WM_PAINT: / 窗口客户区需要重画HDC hdc;PAINTSTRUCT ps;/ 使无效的客户区变的有效,并取得设备环境句柄hdc = :BeginPaint (hwnd, &ps) ;/ 显示文字:TextOut(hdc, 10, 10, szText, strlen(szText);:E

16、ndPaint(hwnd, &ps);return 0;case WM_CHAR:char szChar20;sprintf(szChar,"char is %d",wParam);MessageBox(hwnd,szChar,"Windows",MB_OK);break;case WM_LBUTTONDOWN:MessageBox(hwnd,"mouse clicked","message",0);HDC hdc;hdc=GetDC(hwnd);TextOut(hdc,0,50,"Windows

17、 program",strlen("Windows program");ReleaseDC(hwnd,hdc); break;case WM_CLOSE:if(IDYES=MessageBox(hwnd,"是否退出程序?","Windows",MB_YESNO)DestroyWindow(hwnd);case WM_DESTROY: / 正在销毁窗口/ 向消息队列投递一个WM_QUIT消息,促使GetMessage函数返回0,结束消息循环:PostQuitMessage(0) ;return 0 ;/ 将我们不处理的消息交给

18、系统做默认处理return :DefWindowProc(hwnd, message, wParam, lParam);结果显示:三、课程设计总结或结论实验三 用多线程方法解决哲学家就餐问题吧1、 实验目的与要求目的:理解Windows编程环境下的线程同步机制,掌握线程同步的方法,包括临界区对象、事件内核对象、互锁函数等方法,并能用线程同步解决经典的线程同步问题,体会多线程编程。要求:1)为每个哲学家产生一个线程,设计正确的同步算法2)每个哲学家取得一双筷子开始用餐后,即时显示“Dining”和该哲学家的自定义 标识符以及餐桌上所有几位哲学家标识符及其所坐的位置。3)设定共有5个哲学家需用餐。

19、每位用餐耗时10秒钟以上。4)多个哲学家须共享操作函数代码二、设计正文#include<windows.h>#include<process.h>#include<iostream>using namespace std;HANDLE g_chops5;UINT WINAPI Philo(PVOID pvParam)int n = atoi(char *) pvParam);if(n%2=1)for(int i=0;i<5;i+):WaitForSingleObject(g_chopsn-1,INFINITE);:WaitForSingleObject

20、(g_chopsn,INFINITE);cout<<n<<" is dinning."<<endl<<endl;:Sleep(10000);cout<<n<<" finished!"<<endl<<endl;:SetEvent(g_chopsn);:SetEvent(g_chopsn-1);elsefor(int i=0;i<5;i+):WaitForSingleObject(g_chopsn,INFINITE);:WaitForSingleObject(g_chopsn-1,INFINITE);cout<<n<<" is dinning."<&

温馨提示

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

评论

0/150

提交评论