键盘钩子在无纸化考试系统中的应用

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:hellolvkui
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:针对无纸化考试系统中的信息拷贝问题,本文在探讨钩子的运行机制基础上,在 VC++ 6.0中利用DLL和键盘钩子实现了Ctrl+C复制功能的屏蔽。实际应用表明,该方法对防止拷贝信息是有效的。
  关键词:DLL;键盘钩子;VC;Ctrl+C
  中图分类号:TP316.7 文献标识码:A文章编号:1009-3044(2007)04-11176-02
  
  1 引言
  随着计算机技术的发展及计算机的日益普及,无纸化考试与无纸化办公一样已成为大势所趋。计算机辅助考试使老师将主要精力转移到如何利用现代化的科技手段提高教学效率等具有创造性的教学改革工作中。目前许多考试都采用机试。在机试的过程中,为了防止学生拷贝信息,那么就要屏蔽Ctrl+C和鼠标右键复制功能。在VC++6.0中可以使用键盘钩子和鼠标钩子实现对Ctrl+C和鼠标右键等的屏蔽。
  
  2 钩子
  钩子的本质是一段用以处理系统消息的程序,通过系统调用,将其挂入系统。钩子的种类有很多,每种钩子可以截获并处理相应的消息,每当特定的消息发出,在到达目的窗口之前,钩子程序先行截获该消息、得到对此消息的控制权。此时在钩子函数中就可以对截获的消息进行加工处理,甚至可以强制结束消息的传递[1]。
  钩子分类 :
  (1)WH_CALLWNDPROC和WH_CALLWNDPROCRET使你可以监视发送到窗口过程的消息
  (2)WH_DEBUG调试钩子
  (3)WH_FOREGROUNDIDLE当应用程序的前台线程大概要变成空闲状态时,系统就会调用WH_FOREGROUNDIDL
  (4)WH_JOURNALRECORD监视和记录输入事件
  (5)WH_JOURNALPLAYBACK回放用WH_JOURNALRECORD记录事件
  (6)WH_KEYBOARD 键盘钩子
  (7)WH_KEYBOARD_LL低层键盘钩子
  (8)WH_MOUSE鼠标钩子
  (9)WH_MOUSE_LL底层鼠标钩子
  (10)WH_SHELL 外壳钩子
  (11)WH_MSGFILTER 和 WH_SYSMSGFILTER 使我们可以监视菜单,滚动条,消息框等。
  对每种类型的钩子由系统来维护一个钩子链,最近安装的钩子放在链的开始,而最先安装的钩子放在最后,也就是后加入的钩子先获得控制权。其中,全局钩子函数必须含在DLL中,而线程专用钩子还可以包含在执行文件中[2-4]。
  
  3 实现方法
  3.1 安装钩子函数
  HHOOK SetWindowsHookEx(
  int idHook,// hook type
  HOOKPROC lpfn, // hook procedure
  HINSTANCE hMod,// handle to application instance
  DWORD dwThreadId // thread identifier);
  idHook的取值决定Hook要截获消息的类型(如系统消息、键盘消息、鼠标消息或所有消息)和截获方式(如到达目的程序之前还是目的程序处理之后),主:WH_CALLWNDPROC, WH_CALLWNDPROCRET,WH_GETMESSAGE,WH_JOURNALRECORD,WH_KEYBOARD,WH_MOUSE,WH_SHELL。由于本程序要实现键盘钩子功能,所以选用WH_KEYBOARD。Windows发出的消息如符合钩子函数的条件就调用设置的钩子函数(地址为lpfn),钩子函数由用户定义,其接口格式必须为:
  LRESULT CALLBACK KeyboardProc(
  int code,// hook code
  WPARAM wParam,// virtual-key code
  LPARAM lParam // keystroke-message information);
  其中参数wParam,lParam因钩子的类型不同有不同含义。参数code <0必须设置返回值CallNextHookEx();
  SetWindowsHookEx函数多数情况下在DLL中,所以hMod通常为
  HMODULE GetModuleHandle(
  LPCTSTR lpModuleName // module name);
  dwThreadId如为0,则为系统钩子,监视所有线程。
  3.2 卸载钩子函数
  安装上钩子函数会降低系统性能,用完后应调用卸载钩子函数
  BOOL UnhookWindowsHookEx(
  HHOOK hhk // handle to hook procedure);
  以释放系统资源。Hhk 是安装的钩子句柄。
  
  4 键盘钩子在无纸化考试中的应用
  在无纸化考试系统中,为了防止学生拷贝信息,需要安装一个系统钩子监视所有进程。信息的拷贝,可以通过CTRL+C组合键,也可以通过右键菜单。屏蔽CTRL+C组合键的使用,要安装一个键盘钩子;屏蔽右键菜单,那么就要监视鼠标事件,鼠标钩子可以完成此功能。下面就利用键盘钩子屏蔽CTRL+C复制功能的方法加以论述。
  以下程序在VC++6.0中编译通过。步骤如下:
  如果Hook在应用程序中实现,若应用程序不是当前窗口时,该Hook就不起作用;如果Hook在DLL中实现,程序在运行中动态调用它,它能实时对系统进行监控。所以采用在DLL中实现Hook。
  新建一个Win32 Dynamic-Link Library工程,以下代码加入源文件中:
  #include
  HHOOK g_Keyboard=NULL; //用以保存设置的钩子句柄
  HWND g_hWnd=NULL; //MessageBox要用到窗口句柄,
  //设置一个全局的窗口句柄变量,当调用sethook(HWND hwnd)函数时
  //窗口句柄就可以通过参数传进来。
  新建一个基于对话框的应用程序,工程名字为HookDLG。在HookDLG.cpp文件中加入以下代码:
  _declspec(dllimport) void sethook(HWND hwnd);
  声明sethook(HWND hwnd);为DLL中导出的函数。
  在BOOL CHookDlg::OnInitDialog() 成员函数中就可以调用
  sethook(m_hWnd);
  开始监控键盘。
  
  5 结语
  动态连接库、钩子函数是Windows编程中要经常用到的重要技术,特别是系统钩子,利用它可以对Windows系统消息进行拦截、监视和处理。通过本文所介绍的方法,可以屏蔽Ctrl+C组合键的使用。该方法在一些考试系统中得到应用,并证明是有效的。参照此方法,可以方便的做一个鼠标钩子,屏蔽鼠标右键功能。
  参考文献:
  [1]申晓龙,许文雨,谭献海. Windows钩子技术的研究与应用[J].成都信息工学院学报,2005, 20(4):380-384.
  [2]杨宏宇.Hook类型选型[J].计算机应用.2003,23(5): 118-122.
  [3]潘爱民.C++Primer[M].北京:中国电力出版社,2000.
  [4]张力.VisualC++高级编程[M]. 北京:人民邮电出版社, 2002.
  本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
其他文献
布图规划是VLSI设计中非常重要的步骤。在计算机辅助设计中,布图被表示成编码以使其容易被计算机处理。Single-Sequence就是一种非常有用的表示布图的编码方法。一个布图中,
随着科学技术的迅速发展,我国各专业的发展也取得了相应的进展。随着融媒体的发展,传统电视媒体的话题性受到了质疑。媒体融合包括汇集现有资源进行收集和编辑,对现有产品进
目的研究探讨人乳头瘤病毒(HPV)阳性患者宫颈做活组织病理检查及P16蛋白检测的价值,并加以分析。方法选取2017年12月至2019年12月在安徽医科大学附属阜阳医院接受检查确诊的2
台湾金平菇又名台湾金黄菇,子实体色泽金黄、口感细嫩、味鲜香浓,是一种畅销台湾和欧美市场的食用菌。
中国共产党历来高度重视新闻舆论工作,从成立起就注重运用新闻媒体传播真理、组织群众并积极推动工作,新闻舆论工作在革命建设各个历史时期都发挥了十分重要的作用。舆论引导
通过对医疗报销系统的业务流程分析,根据系统总体设计、功能设计,给出了医疗报销系统的解决方案,并利用存储过程优化了系统对数据库的访问。该方案有较强的实用性和通用性,为
首字母缩略语作为缩略语的一个重要组成部分,在一定程度上反映了新事物和新现象出现所带来的社会发展和变化。英汉双解学习型词典是我国英语学习者必不可少的参考工具,较全面
摘 要 随着信息和通信技术的发展以及数字媒体在辞书编纂中的运用,多模态和融媒体词典成为辞书界热议的话题。但从发表的文章来看,它们大多模糊了媒体与模态的关系,所涉词典并不具有真正的多模态特征。文章从纸质辞书的困境与数字化辞书的必然性入手,从三个方面来探讨如何在融媒体框架下设计多模态词典文本,阐释多模态元素的释义功能,包括词典从平面媒体向融媒体的进化、融媒体框架下的媒体与模态的融合、多模态词典文本的特
阐述化工企业网络建设的必要性,并详细论述化工企业网络平台设计选用原则,提出搭建企业信息网络平台的规划思路,从网络办公(OA)、财务管理、生产控制、企业资源计划(ERP)、电子商务
本文以浙江省建科院空调系统改造工程为应用示范及研究对象,通过对夏热冬冷地区使用地源热泵地下热平衡问题、温湿度独:立控制系统最小新风量取值问题、地源热泵与溶液除湿系统