计算机实验室学生上机操作监控系统的研究和实现.docx
8页计算机实验室学生上机操作监控系统的研究和实现高职院校在人才培养目标中都把学生动手能力的培养作为主要目标 学生动手能力的培养主要不是靠课堂理论教学, 而主要通过实习操作等实践性教学环节来保证, 对于软件开发类、 图形图像、动漫等课程来说都离不开上机这个环节随着网络和软件业的发展,现在的 PC机不仅仅是学习、开发的工具,而且还是娱乐消遣的工具,你可以用它听音乐、看电影、 上网等 现在很多学生由于年轻、 抵不住 PC 机的这些诱惑,利用上机实验的时间听音乐、看电影、上网等,而且他们做这些时极具有隐蔽性、 指导教师不易发现 为了保证有好的教学效果,需要指导教师对学生实验的监督力度要加强本系统分成服务端和客户端, 但是对服务端和客户端的功能分配和实现有所改进和优化本系统的流程图简化如图 1:服务端安装在教师机或管理员的教师机上面( 内存最好要大点) ,客户端安装在学生机上面,然后组装成一个局域网服务端实现的功能初步规划如下 : 管理员登录、学生信息管理、群发文件、客户端进程允许列表设置、实时监控管理、教师演示及录制、学生演示、屏幕监控、电子点名、遥控、发送提醒信息等等 ; 客户端实现的功能初步规划如下: 学生注册及登录、 作业提交、发送请求操作、举手提问、录制教学视频等等。
由于篇幅关系,本文只对服务端如何与客户端通信及服务端如何控制和监控客户端程序进程进行归纳和总结设计和实现思路: 监控程序运用 Visual Studio 开发工具开发,选择WIN32应用程序类型监控程序实现了自启动,运行于 后台,与服务器保持通信实现过程 : 学生机启动后,监控程序自动启动运行于后台,接收服务器端的消息, 得到可以打开的应用程序运行列表 在实 验的过程中, 每 100 秒监控计算机所打开的应用进程一次, 当发 现一个不在集合列表中的应用程序进程打开时, 监控程序自动关 闭进程程序, 并将学生的上机情况传送到服务器端, 存储于服务 器的数据库中, 供以后作学生平时成绩统计、 教师教学评估使用下面详细讲解其实现过程:1、程序设计过程在 VC中通过 Win32 Application- 〉A Simple Win32 application 建立一个工程, 取名为 cli 打开 winmain() 函数, 按以下过程完成各项功能1) 建立一个 scoke ,接收服务器信息,即学生实验可打开的应用程序集,保存在一个字符串中2) 用 SetTime() 先添加一个计时器对象将uElapse 参数设置为 100000,即每 100 秒监控一次。
3) 然后在 while(GetMessage()) 语句中实现监控与处理监控中, 先发现用户打开的应用程序窗口, 再依次得到应用的进程 ID 和应用程序名,如果是非指定的程序,则上报服务器,同时自动关闭进程4) 自启动的实现2、服务器端与客户端通信实现Windows下编写网络应用程序大都利用socke进行数据通信, 包括客户端和服务器端编写, 本文主要探讨客户端程序的编写客户端编写遵守以下过程:(1) 创建客户套接字( CREAT)ESOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);(2) 与远程服务器进行连接(CONNECT)SOCKADDR_IN addrSrv;// 为便于调试,取服务器IP 为 127.0.0.1 ,建立应用时再修改为服务器的 IP addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");addrSrv.sin_family=AF_INET;addrSrv.sin_port=htons(6000);connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR) );(3)开始数据传输,发送(SEND接UR ( RECEIVE。
char recvBuf[255];recv(sockClient,recvBuf,100,0);send(sockClient,”本机 IP+应用程序名 + 时间",strlen("发 送串 ")+1,0);(4) 关闭套接字(CLOSE SOCKET)closesocket(sockClient);服务器端通信主要包括CREA、TBIND、 LISTEN、 ACCEP、TSEND、RECEIVE CLOSE SOCKET过程不做详细讨论3、识别客户端打开的当前应用程序名该功能的实现分为三步, 首先得到实验机打开的窗口句柄及进程 ID ,接着得到系统进程的快照句柄,再根据得到的 ID 到快照句柄中进行遍历,找到对应的PROCESSENTRY32勾的进程信息变量,而应用程序名是该结构的 szExeFile 成员值1)运用 HWND hwnd=GetForegroundWindow()得至>]前台打开的窗口句柄,运用 GetWindowThreadProcessId( ); 得到应用进程 ID 代码如下:HWND hwnd=GetForegroundWindow(); // 得到窗口句柄。
DWORD dwProcessID;GetWindowThreadProcessId(hwnd, &dwProcessID ); // 得到进程 ID(2)得到系统进程的快照句柄,Windows操作系统为所有保存在系统中的进程线程的当前状态制作了一个只读副本,通过WIN32 API 函数 CreateToolhelp32Snapshot() 获取这个句柄// 创建系统进程快照句柄HANDLE hSnapshot =CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);(3)快照的每一个信息是一个 PROCESSENTR幽勾的进程信息变量,运用 Process32First(); Process32Next() 对这个快照进行遍历查找 通过进程结构中成员 th32ParentProcessID 与ID 的对比,查找到对应的进程结构变量,成员 szExeFile 代表应用程序名PROCESSENTRY32 pe;定义一个/进程结构变量Process32First(hSnapshot, &pe); // 先搜索系统中第一个进程的信息// 对系统中的所有进程进行枚举,并保存应用程序名到szFile 中。
Char sz];// 保存应用程序名do{if(pe.th32ParentProcessID==dwProcessID){strcpy(sz);break;}} while (Process32Next(hSnapshot, &pe));4、自动关闭游戏娱乐应用程序在第三大步得到了学生机打开的应用程序名,保存在字符变量 szFile 中,在第二步通过与服务器通信得到可以打开的应用程序集合, 保存在字符串变量str 中, 如果学生打开的应用程序不在这个集合里,则关闭应用进程char *p;p=strstr(szFile,s);if(!p){ // 传送到服务器见第二步//关闭当前应用进程见下面的分析)}终止进程的方法如下 :由于终止的进程在当前进程之外,先通过OpenProcess() 和第三步得到的进程ID 得到进程句柄HANDLE hProcess = NULL;hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, dwProcessID);然后通过该句柄终止进程if (hProcess)TerminateProcess(hProcess,0);5、监控的实现使用 SetTime() 添加一个记时器对象,将时间间隔设置为100000,即10秒,每隔10秒向应用程序发送 WM_TIMER息。
UINT_PTR iTimerID ;iTimerID = SetTimer(NULL,0,100000,NULL) ;响应时钟消息在以下位置添加 实现应用程序名的判断、 传送给服务器、非课堂应用自动关闭等功能while(GetMessage(&msg,NULL,0,0){switch(msg.message){case WM_TIMER:If(int(msg.wParam)==iTimerID)// 各程序的功能实现参阅前面的分析}}6、自启动的实现建立一个自启动程序 并将前面建立的 cli 执行文件复制到本文件在本文中, 先得到自身程序的路径, 然后在注册表中增加一个的启动项 即: 修改注册表, 增加一个“ load ”项 ,将客户端监控程序设置为 load 项的值char Self];#define key“ Software \\Microsoft\\WindowsNT\\CurrentVersion\\Windows"// 得到自身程序路径GetModule (NULL, SelfFile, MAX_PATH);strcat(SelfFile,"\\cli.exe");HKEY hKey;// 打开注册表键,不存在则创建它longlRet=RegCreateKeyEx(HKEY_CURRENT_USER,key,0,NULL,REG_OP TION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,NULL);// 修改注册表键值,没有则创建它lRet=RegSetValueEx(hKey,"load",0,REG_SZ,(BYTE*)self(selfFile));RegCloseKey(hKey);7、结语本文介绍了实验室学生机的监控程序的编写, 包括与服务器的通信, 不间断地对学生机上打开的应用进行识别判断, 如果是非课堂安排的应用将自动关闭, 并记录下来传给服务器以利于教学评估。
客户端监控程序的特点是自启动,工作于后台,并且隐藏进程,具有一定的安全性和隐蔽性。





