欢迎来到天天文库
浏览记录
ID:44960672
大小:36.00 KB
页数:4页
时间:2019-11-06
《计算机论文:监视、控制计算机的使用》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、本文档系作者精心整理编辑,实用价值高。计算机论文:监视、控制计算机的使用基于WindowsNT/2000的应用系统中,一些关键的人机交互工作站,常需要了解并记录所有操作人员操作计算机的情况。如:在工业控制领域,一些使用计算机对设备进行监视和控制的工作站,需要非常高的可靠性和安全性。在这些工作站上通常要求只能运行系统所要求的应用程序,不能运行与系统无关的程序,同时要求对计算机操作人员的所有原始输入进行记录,以便出现事故(如操作故障、程序异常退出)的时候,用来分析是人为原因,还是系统原因造成的。基于以上需求,我们必须解决两个问
2、题,一个是如何记录操作人员的输入,另一个是如何控制操作人员的输入。在DOS、Windows3.1、Windows95/98中都可以编写响应键盘和鼠标输入的中断处理程序,截取来自键盘和鼠标的输入,记录、分析后依情况分别处理。但是在WindowsNT和Windows2000中,这样的解决方法将不再行得通,这是因为WindowsNT/2000操作系统为了提高系统的可靠性,不再允许应用程序直接对系统设备的底层进行操作。这样,用户的应用程序将不能够对计算机的端口地址进行读写操作,所以在WindowsNT/2000操作系统中对计算机端
3、口的读写是无效的。另外一种方法能够非常完美地解决这个问题,就是可以编写操作系统的设备驱动程序来解决,但是要编写系统的设备驱动程序,必须对WindowsNT/2000的系统底层以及整个系统架构有比较深入的了解。而且设备驱动程序的编写、调试都比较困难,同时这方面的资料也比较少。所以本文没有采取这种方法,而是采用微软公布的标准Win32函数和钩子技术来解决这个问题,比较方便而且快捷。在WindowsNT/2000操作系统中,称各种输入为事件(Event),所有的键盘、鼠标输入事件以及其他事件都是通过消息传递处理机制来得到响应的。
4、控制、监视计算机实际上是控制、监视事件消息流。Windows操作系统为这种应用提供钩子(Hook)技术。这种技术的要点就是在操作系统的消息传递处理机制上外挂一个我们定义的函数,可以使用这个函数来监视、控制系统的事件消息流。本文采用的就是这种方法,这种方法要求将所有的程序代码放入系统可以加载的动态链接库中。下面我们以键盘输入的监视和控制为例详细叙述这种方法。其总体思路如下:首先,定义自己的钩子函数。计算机论文其次,安装自定义的钩子函数,此后钩子函数在后台开始工作。一旦系统发现击键动作或者鼠标动作,系统将马上调用该自定义的钩子
5、函数,并将事件消息传入,供程序分析判断。它可以监视所有的击键和鼠标动作,与DOS时代的中断调用有非常相似的地方。最后,卸载自定义的钩子函数。钩子函数的定义微软的钩子技术的原理就是应用程序可以在系统的消息处理机制上外挂一个子程序,在消息尚未到达目的地之前,用该子程序来截获此消息,以进行监视和控制。我们这里使用的是WH_KEYBOARD_LL类型的钩子函数,这种类型的钩子函数可以截获所有的键盘事件,即敲击键盘上的任何一个键,我们自定义的钩子函数都可以知道。该类型钩子函数要求安装自定义的钩子函数必须是以下原型:LRESULTCA
6、LLBACKLowLevelKeyboard-Proc(intnCode,WPARAMwParam,LPARAMlParam);其中各参数的含义如下:intnCode:用来决定钩子函数如何处理事件消息的代码,参数的取值为HC_ACTION时,参数wParam、lParam包含了所需的键盘消息事件信息。WPARAMwParam:键盘消息事件的类型ID。该参数有四种可能的消息类型取值:WM_KEY-DOWN,WM_KEYUP,WM_SYSKEYDOWN,WM_SYSKEYUP.LPARAMlParam:指向一个类型为KBDLL
7、HOOKSTRUCT的结构指针。该结构容纳了底层键盘输入事件的详细信息,它的定义如下:typedefstructtagKBDLLHOOKSTRUCT{DWORDvkCode;//一个范围从1到254的虚拟键码DWORDscanCode;//键盘的硬件扫描码DWORDflags;//一系列的标志位//0比特位指示该键是不是扩展键(如:功能键,或数字小键盘上的键),1表示是,0表示否//1~3比特位保留//4比特位用来区分该事件是否来自Win32函数keybd_event()调用,1表示是,0表示否//5比特位为状态描述码,如
8、果ALT键按下,该位是1,否则是0。本文档系作者精心整理编辑,如有需要,可查看作者文库其他文档。本文档系作者精心整理编辑,实用价值高。//6比特位保留。//7比特位是变换状态位,键被按下为0,键被释放为1。DWORDtime;//该消息事件的时间标记。DWORDdwExtraInfo;//该消息的其他扩
此文档下载收益归作者所有