课程设计综合实验报告科院.docx
- 文档编号:6919183
- 上传时间:2023-01-12
- 格式:DOCX
- 页数:14
- 大小:175.42KB
课程设计综合实验报告科院.docx
《课程设计综合实验报告科院.docx》由会员分享,可在线阅读,更多相关《课程设计综合实验报告科院.docx(14页珍藏版)》请在冰豆网上搜索。
课程设计综合实验报告科院
科技学院
课程设计报告
(2011——2012年度第2学期)
名称:
Windows体系编程
题目:
课内综合实验
院系:
科技学院信息工程系
班级:
软件09K2
学号:
091909020221
学生姓名:
彭奇
指导教师:
王新颖
实验学时:
12学时
成绩:
日期:
2012年5月29日
实验一类windows进程任务管理器实验
一、课程设计的目的与要求
目的:
理解Windows编程环境下的进程管理机制,能创建一个完成特定功能的进程,并能对进程进行信息的获取、终止和保护,实现一个类Windows的进程任务管理器。
要求:
1.编写一段程序,能够完成创建进程的功能,要求启动windows记事本程序(notepad.exe),同时打开一个文本文件,路径为:
c:
\system\user.log。
并打印出新建进程ID。
2.获取当前系统进程信息,打印输出进程名称和ID号。
3.终止任意进程并获取退出代码。
二、设计正文
#include"stdafx.h"
#include
#include
#include
BOOLTerminateProcessFromId(DWORDdwId)
{
BOOLbRet=FALSE;
//打开目标进程,取得进程句柄
HANDLEhProcess=:
:
OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwId);//PROCESS_ALL_ACCESS:
所有权限,包括创建、读、写等。
//OpenProcess如果成功,则该进程内核对象引用计数+1
if(hProcess!
=NULL)
{
bRet=:
:
TerminateProcess(hProcess,0);
CloseHandle(hProcess);//结束了进程,还要使该进程内核对象引用计数-1
}
returnbRet;
}
intmain(intargc,char*argv[])
{
charszCommandLine[]="notepad";
STARTUPINFOsi={sizeof(si)};
PROCESS_INFORMATIONpi;
si.dwFlags=STARTF_USESHOWWINDOW;//指定wShowWindow成员有效
si.wShowWindow=TRUE;//此成员设为TRUE的话则显示新建进程的主口,
//为FALSE的话则不显示
BOOLbRet=:
:
CreateProcess(
NULL,//不在此指定可执行文件的文件名
szCommandLine,//命令行参数
NULL,//默认进程安全性
NULL,//默认线程安全性
FALSE,//指定当前进程内的句柄不可以被子进程继承
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.dwThreadId);
}
PROCESSENTRY32pe32;//在使用这个结构之前,先设置它的大小
pe32.dwSize=sizeof(pe32);//给系统内的所有进程拍一个快照
HANDLEhProcessSnap=:
:
CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(hProcessSnap==INVALID_HANDLE_VALUE)
{printf("CreateToolhelp32Snapshot调用失败!
\n");
return-1;
}
BOOLbMore=:
:
Process32First(hProcessSnap,&pe32);//遍历快照,轮流显示每个进程的信息
while(bMore)
{printf("进程名称:
%s\n",pe32.szExeFile);
printf("进程ID号:
%u\n\n",pe32.th32ProcessID);
bMore=:
:
Process32Next(hProcessSnap,&pe32);
}
//不要忘记清除掉snapshot对象
:
:
CloseHandle(hProcessSnap);
DWORDdwId;
printf("请输入您要终止的进程的ID号:
\n");
scanf("%u",&dwId);
if(TerminateProcessFromId(dwId))
{
printf("终止进程成功!
\n");
}
else
{
printf("终止进程失败!
\n");
}
return0;
}
实验结果:
实验二窗口与DLL实验
一、实验目的与要求:
目的:
了解windows窗口程序的结构与特点,了解windows程序中至关重要的消息机制,包括消息的定义、消息循环以及消息相应函数。
熟悉基本的WINAPI,了解DLL的使用方法。
要求:
1.利用WIN32API编写WinMain函数,完成窗口类的注册,窗口的创建,显示,更新,并完成消息循环过程。
2.利用windowsAPI实现窗口过程函数LRESULTCALLBACKWinProc(),对WM_CHAR、WM_PAINT、WM_CLOSE、WM_DESTROY消息进行响应,并对默认消息进行响应。
其中,对WM_PAINT的响应要完成窗口重绘,WM_CLOSE响应完成关闭窗口,WM_DESTROY完成销毁应用程序。
3.在对WM_LBUTTONDOWN消息函数中,通过调用DLL完成对该消息的响应,实现弹出显示鼠标点击位置对话框的功能。
二、设计正文
#include
#include"stdafx.h"
//窗口函数的函数原形
LRESULTCALLBACKMainWndProc(HWND,UINT,WPARAM,LPARAM);
intAPIENTRYWinMain(HINSTANCEhInstance,
HINSTANCEhPrevInstance,
LPSTRlpCmdLine,
intnCmdShow)
{
charszClassName[]="MainWClass";
WNDCLASSEXwndclass;
//用描述主窗口的参数填充WNDCLASSEX结构
wndclass.cbSize=sizeof(wndclass);//结构的大小
wndclass.style=CS_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);//使用预定义的光标
wndclass.hbrBackground=(HBRUSH)
:
:
GetStockObject(WHITE_BRUSH);//使用白色背景画刷
wndclass.lpszMenuName=NULL;//不指定菜单
wndclass.lpszClassName=szClassName;//窗口类的名称
wndclass.hIconSm=NULL;//没有类的小图标
//注册这个窗口类
:
:
RegisterClassEx(&wndclass);
//创建主窗口
HWNDhwnd=:
:
CreateWindowEx(
0,//dwExStyle,扩展样式
szClassName,//lpClassName,类名
"MyfirstWindow!
",//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)
{
:
:
MessageBox(NULL,"创建窗口出错!
","error",MB_OK);
return-1;
}
//显示窗口,刷新窗口客户区
:
:
ShowWindow(hwnd,nCmdShow);
:
:
UpdateWindow(hwnd);
//从消息堆中取出消息
MSGmsg;
while(:
:
GetMessage(&msg,NULL,0,0))
{
//转化键盘消息
:
:
TranslateMessage(&msg);
//将消息发送到相应的窗口函数
:
:
DispatchMessage(&msg);
}
//当GetMessage返回0时程序结束
returnmsg.wParam;
}
LRESULTCALLBACKMainWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam)
{
charszText[]="最简单的窗口程序!
";
switch(message)
{
caseWM_PAINT:
//窗口客户区需要重画
{
HDChdc;
PAINTSTRUCTps;
//使无效的客户区变的有效,并取得设备环境句柄
hdc=:
:
BeginPaint(hwnd,&ps);
//显示文字
:
:
TextOut(hdc,10,10,szText,strlen(szText));
:
:
EndPaint(hwnd,&ps);
return0;
}
caseWM_CHAR:
{
charszChar[20];
sprintf(szChar,"charis%d",wParam);
MessageBox(hwnd,szChar,"Windows",MB_OK);
break;
}
caseWM_LBUTTONDOWN:
{
MessageBox(hwnd,"mouseclicked","message",0);
HDChdc;
hdc=GetDC(hwnd);
TextOut(hdc,0,50,"Windowsprogram",strlen("Windowsprogram"));
ReleaseDC(hwnd,hdc);
break;
}
caseWM_CLOSE:
if(IDYES==MessageBox(hwnd,"是否退出程序?
","Windows",MB_YESNO))
{
DestroyWindow(hwnd);
}
caseWM_DESTROY:
//正在销毁窗口
//向消息队列投递一个WM_QUIT消息,促使GetMessage函数返回0,结束消息循环
:
:
PostQuitMessage(0);
return0;
}
//将我们不处理的消息交给系统做默认处理
return:
:
DefWindowProc(hwnd,message,wParam,lParam);
}
结果显示:
三、课程设计总结或结论
实验三用多线程方法解决哲学家就餐问题吧
1、实验目的与要求
目的:
理解Windows编程环境下的线程同步机制,掌握线程同步的方法,包括临界区对象、事件内核对象、互锁函数等方法,并能用线程同步解决经典的线程同步问题,体会多线程编程。
要求:
1)为每个哲学家产生一个线程,设计正确的同步算法
2)每个哲学家取得一双筷子开始用餐后,即时显示“Dining¡¡±和该哲学家的自定义标识符以及餐桌上所有几位哲学家标识符及其所坐的位置。
3)设定共有5个哲学家需用餐。
每位用餐耗时10秒钟以上。
4)多个哲学家须共享操作函数代码
二、设计正文
#include
#include
#include
usingnamespacestd;
HANDLEg_chops[5];
UINTWINAPIPhilo(PVOIDpvParam)
{
intn=atoi((char*)pvParam);
if(n%2==1)
{
for(inti=0;i<5;i++)
{
:
:
WaitForSingleObject(g_chops[n-1],INFINITE);
:
:
WaitForSingleObject(g_chops[n],INFINITE);
cout< : : Sleep(10000); cout< "< : : SetEvent(g_chops[n]); : : SetEvent(g_chops[n-1]); } } else { for(inti=0;i<5;i++) { : : WaitForSingleObject(g_chops[n],INFINITE); : : WaitForSingleObject(g_chops[n-1],INFINITE); cout< : : Sleep(10000); cout< "< : : SetEvent(g_chops[n-1]); : : SetEvent(g_chops[n]); } return0; } } intmain(intargc,char*argv[]) { for(inti=0;i<5;i++) { g_chops[i]=: : CreateEvent(NULL,FALSE,TRUE,NULL); } HANDLEhThread[5]; hThread[0]=(HANDLE)_beginthreadex(NULL,0,Philo,"1",0,NULL); Sleep(10); hThread[1]=(HANDLE)_beginthreadex(NULL,0,Philo,"2",0,NULL); Sleep(10); hThread[2]=(HANDLE)_beginthreadex(NULL,0,Philo,"3",0,NULL); Sleep(10); hThread[3]=(HANDLE)_beginthreadex(NULL,0,Philo,"4",0,NULL); Sleep(10); hThread[4]=(HANDLE)_beginthreadex(NULL,0,Philo,"5",0,NULL); Sleep(10); getchar(); return0; } 实验结果:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计综合实验报告 科院 课程设计 综合 实验 报告