毕业设计论文网络虚拟实验平台的构建与测试.doc

上传人:sccc 文档编号:4866806 上传时间:2023-05-20 格式:DOC 页数:22 大小:226.02KB
返回 下载 相关 举报
毕业设计论文网络虚拟实验平台的构建与测试.doc_第1页
第1页 / 共22页
毕业设计论文网络虚拟实验平台的构建与测试.doc_第2页
第2页 / 共22页
毕业设计论文网络虚拟实验平台的构建与测试.doc_第3页
第3页 / 共22页
毕业设计论文网络虚拟实验平台的构建与测试.doc_第4页
第4页 / 共22页
毕业设计论文网络虚拟实验平台的构建与测试.doc_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《毕业设计论文网络虚拟实验平台的构建与测试.doc》由会员分享,可在线阅读,更多相关《毕业设计论文网络虚拟实验平台的构建与测试.doc(22页珍藏版)》请在三一办公上搜索。

1、网络虚拟实验平台的构建与测试摘 要基于网络的虚拟实验平台是在能够进行网络通信的基础之上将计算机上虚拟的各种仪器、器件,按实验要求组装成一个完整的实验环境,实现搭接实验电路,演示实验过程等功能。远程指导模块是其中的一个功能模块。它分成指导端和被指导端两部分,指导端通过HOOK技术,采集本地机鼠标和键盘信息;然后将这些信息打包,通过P2P网络通信机制将信息包传给被指导端;在被指导端将信息包信息解出,通过mouse_event、keybd_event等函数去控制被指导端的鼠标、键盘动作,实现相关的一些远程指导动作。本模块在VC环境下开发,用到了Windows Socket编程技术,P2P编程思想,H

2、OOK技术,多线程技术等多方面的技术。由于整个系统模块很多,本设计中编写了独立的测试程序,经过测试基本达到预期的设计目标。关键词:远程指导;P2P;Windows Socket编程;HOOK;多线程 Design and Implementation of Remote Guidance Module Based on Network Virtual Experiment PlatformAbstractUnder the foundation of network communications,the network-based Virtual Experimental Platform c

3、ould integrate various computer virtual devices into a complete experimental environment according to the experiment requirements, and connect the experiment circuit and demonstrate the process of experiment. The remote guiding module was one of function modules, which was divided into guiding end a

4、nd the guided end. With HOOK, the guiding end captured the information of local mouse and keyboard, and packed the information to send to the guided part through peer-to-peer network communication mechanism. The guided end will unpack the information, and control the mouse and keyboard of the guided

5、 end by mouse_event, keybd_event functions to implement some remote control actions. Developed under VC environment, the remote guidance module used Windows Socket programming technology, P2P programming ideas, HOOK technology, multithreading technology, and etc. Because there are many modules for t

6、he whole system, an independent testing procedure was programmed to test the modules, which had been proven to achieve the desired objectivesKey words: Remote guidance;Peer-to-Peer;Windows Socket programming;HOOK;Multithreading 目 录 论文总页数:23页1引言11.1项目背景11.2项目介绍11.2.1 基于网络的虚拟实验平台11.2.2 远程指导模块21.3 项目要求

7、21.3.1 功能要求21.3.2 Client/Server(客户端/服务器)结构工作过程22 网络基础知识简介32.1 OSI与TCP/IP参考模型的对应关系32.1.1 OSI参考模型32.1.2 TCP/IP参考模型42.2 Windows Socket编程原理及操作步骤52.3 P2P网络介绍83 相关函数分析与代码实现83.1多线程83.1.1 进程介绍83.1.2 线程介绍83.1.3 进程与线程的关系93.1.4 多线程实现93.2 Hook技术93.2.1 Hook函数简介及类型93.2.2 Hook子过程处理123.2.3 Hook的安装/卸载133.3 设计流程及函数思想

8、153.3.1 简述153.3.2 代码分析154 程序测试与相应改进184.1 程序界面184.2程序相关测试194.2.1 获取对方相关信息194.2.2发送消息及存贮194.2.3被指导端显示信息204.3 相关改进20结 论20参考文献21 1引言近年来,随着信息技术的发展,计算机的普及,网络为我们带了更多的便利。网络技术的发展,引发了控制领域的深刻技术变革,控制系统结构沿着网络化方向与控制系统体系沿着开放性方向发展将是控制系统技术创新的大潮流。计算机局域网络、企业网络、现代信号处理等等使自动化系统与工业控制系统从体系结构、控制方法、产品系列、人机协作方法等都发生了重大的变化。进入21

9、世纪的控制系统以网络为主要特征:一方面是在自动化与工业控制中需要更深层次地渗透通信与网络技术,另一方面是在通信网络的管理与控制中也要求更多的采用控制理论与策略并且由于系统中需要大量的数据交换,服务器的负担很重,所以我们就研究出了基于网络的虚拟实验平台。作为基于网络的虚拟实验平台的远程指导模块,本文通过Windows Socket编程,以HOOK技术,多线程技术作为基础,再利用其他的API函数来实现被指导端对指导端发送请求信息,将信息打包以后通过网络传输到服务器端,指导端收到信息以后,将信息解包,根据信息提示来对被指导端进行相关指导:获取客户的相关信息、锁定鼠标和键盘,对鼠标进行动态的控制和指导

10、键盘的信息输入。1.1项目背景全球信息化的发展,计算机网络给我们提供了优越的通信平台,优秀的软件系统必须要具有网络功能。虚拟实验平台正是应这个大需求而诞生。并且随着信息技术的发展,网络无疑为我们带了更多的便利,同时一个优秀的系统必须要具有网络功能,要完成这些功能,那就要把各种网络通过某种方式连接起来,在网络实现过程中存在穿透NAT的问题,此问题存在较长时间,后来因为网络地址不够而产生了P2P技术,伴随着P2P技术的出现,利用UDP实现P2P网络穿越NAT的即时通讯技术,而问题即被解决。1.2项目介绍1.2.1 基于网络的虚拟实验平台计算机技术、大规模集成电路技术和通讯技术的飞速发展,为虚拟实验

11、的发展奠定了坚实的基础。虚拟实验就是在通用计算机上加载相应的软件或硬件,使得使用者在操作这台计算机时,就像是在操作一台专用的传统试验设备一样。在虚拟实验系统中,软件是整个系统的关键,任何使用者都可以通过软件的相关设置来达到要实现实验的效果。虚拟实验就是利用外部输入(如鼠标的点击、拖动和键盘的敲击等),将计算机上虚拟的各种仪器,按实验要求、过程,组装成一个完整的实验环境,同时在这个环境中完成实验操作,包括实验器材的添加、实验条件的改变、数据采集以及实验结果的模拟、分析。它包含了虚拟仿真技术、计算机技术、实验技术、网络技术与专业等多方面理论知识。1.2.2 远程指导模块远程指导模块是基于网络的虚拟

12、实验平台的一个通信模块,是基于Windows Socket编程,使用Client/Server(客户端/服务器)结构来实现模块的功能,以VC为开发环境,同时以HOOK技术和多线程技术作为基础,再利用API相关函数来实现指导端和被指导端的互动。 1.3 项目要求1.3.1 功能要求完成远程指导的基本功能,指导端和被指导端能够进行P2P网络通信,指导端能够控制被指导端的鼠标和键盘,并且能够存储相关信息,还能够对鼠标进行动态控制和指导键盘的输入。1.3.2 Client/Server(客户端/服务器)结构工作过程Client/Server(客户端/服务器)结构,通过将任务合理分配到Client 端和

13、Server 端,降低了系统的通讯开销,可以充分利用两端硬件环境的优势,在TCP/IP网络应用中,通信的两个进程间相互作用的主要模式是客户机/服务器模式(client/server),即客户向服务器提出请求,服务器接收到请求后,提供相应的服务。客户机/服务器模式的建立基于以下两点:首先,建立网络的起因是网络中软硬件资源、运算能力和信息不均等,需要共享,从而造就拥有众多资源的主机提供服务,资源较少的客户请求服务这一非对等作用。其次,网络之间进程通信完全是异步的,相互通信的进程间既不存在父子关系,又不共享内存缓冲区,因此需要一种机制为希望通信的进程间建立联系,为二者的数据交换提供同步,这就是基于客

14、户机/服务器模式的TCP/IP:客户机/服务器模式在操作过程中采取的是主动请求的方式。首先服务器方要先启动,并根据请求提供相应的服务:打开一个通信通道并告知本地主机,它愿意在某一地址和端口上接收客户请求。等待客户请求到达该端口。接收到重复服务请求,处理该请求并发送应答信号。接收到并发服务请求,要激活一个新的进程(或线程)来处理这个客户请求。新进程(或线程) 处理此客户请求,并不需要对其它请求做出应答。服务完成后,关闭此新进程与客户的通信链路,并终止。返回第二步,等待另一客户请求,关闭服务器。客户方:打开一个通信通道,并连接到服务器所在主机的特定端口。向服务器发送服务请求报文,等待并接收应答;继

15、续提出请求。请求结束后关闭通信通道并终止。2网络基础知识简介2.1 OSI与TCP/IP参考模型的对应关系2.1.1 OSI参考模型国际标准化组织(ISO)开发了开放式系统互联(OSI)参考模型,以促进计算机系统的开放互联。开放式互联就是可在多个厂家的环境中支持互联。该模型为计算机间开放式通信所需要定义的功能层次建立了全球标准。OSI模型将通信会话需要的各种进程划分成7个相对独立的功能层次,这些层次的组织是以在一个通信会话中事件发生的自然顺序为基础的。表1描述了OSI, 1-3层提供了网络访问,4-7层用于支持端端通信。1、物理层是OSI模型的最低层,它建立在物理通信介质的基础上,规定了机械的

16、、电气的功能;该层负责建立、保持和拆除物理链路;规定如何在此链路上传送原始比特流;比特如何编码,使用的电平,极性,连接插头插座的插脚如何分配等。所以在物理层数据的传送单位是比特(bit)。2、数据链路层它把相邻两个节点间不可靠的物理链路变成可靠的无差错的逻辑链路,包括把原始比特流分帧(frame)、顺序、排序、设置检错、确认、重发、流控等功能;数据链路层传动信息的单位是frame,每帧(frame)包括一定数量的数据和一些必要的控制信息,在每帧(frame)的控制信息中,包括同步信息、地址信息、流量信息等;同物理层相似,数据链路层负责建立、维护和释放数据链路。3、网络层,它连接网络中任何两个计

17、算机点,从一个节点上接收数据,正确的传送到另一个节点;在网络层,传送的信息单位是分组或包(packet)。网络层的主要任务是要选择合适的路由和交换节点,透明地向目的站交付发送站所发的分组或包,这里的透明表示收发两端好像是直接连通的,另外网络层还要解决网络互连、拥挤控制等问题。上述三层组成了所谓的通信子网,用户计算机连接到此子网上。通信子网负责把一个地方的数据可靠地传送到另一个地方,但并未实现两个地方主机上进行进程之间的通信,通信子网的主要功能是面向通信的。4、传输层上真正地实现了端对端通信,把数据可靠地从一方的用户进程或程序送到另一方的用户进程或程序。这一层的控制通常由通信两端的计算机完成。中

18、间节点一般不提供这一层的服务,这一层的通信与通信子网无关。从这一层开始的以上各层全部是针对通信的最终的源端目的端计算机的进程之间的。传输层传送的信息单位是报文(message)。传输层向上一层提供一个可靠的端一端服务,使上一层看不见下面几层的通信细节。正因为如此,传输层成为网络体系结构中关键的一层,对于传输层的功能,主要在主机内实现。而对于物理层、数据链路层以及网络层的功能均能在报文接口机中实现。对于传输层之上的各个层次的功能通常在主机中实现。5、会话层又称对话层会话层允许两个计算机上的用户进程建立对话连接,双方相互确认身份,协商对话连接的细节;它可管理对话是双向同时进行的,还是任何时刻只能一

19、个方向进行。在后一种情况下,对话层控制哪一方有权发送数据;对话层还提供同步机制,在数据流中插入同步点机制,在每次网络出现故障后可以仅重传最近一个同步点以后的数据,而不必从头开始。以上两层为两个计算机上的用户进程或程序之间提供了正确传送数据的手段。6、表示层主要解决用户信息的语法表示问题。表示层将数据从适合于某一系统的语法转变为适合于OSI系统内部使用的语法。具体地讲,表示层对传送的用户数据进行翻译、编码和变换,使得不同类型的机器对数据信息的不同表示方法可以相互理解。7、应用层主要处理资源可用性和安全问题,它包含了大量人们普遍需要的协议,如FTP、TELNET、HTTP、SMTP等。最近几年,应

20、用层协议发展很快,出现了很多新的应用,如ICQ、Multimedia stream等。2.1.2 TCP/IP参考模型与OSI参考模型不同,TCP/IP模(表2)更侧重于互联设备间的数据传送,而不是严格的功能层次划分。它通过解释功能层次分布的重要性来做到这点,但仍为设计者具体实现协议留下很大的余地。因此,OSI参考模型在解释互联网络通信机制比较适合,但TCP/IP成为了互联网络协议的市场标准。TCP/IP老-模型是在它所解释的协议出现很久以后才发展起来的,更重要的是,在于它更强调功能分布而不是严格的功能层次的划分,因此它比OSI模型更灵活。1 应用层 应用层包括SMTP, FTP, HTTP,

21、 NFS, NIS, LPD, Telnet f II Remote Login应用层包括一些服务,这些服务在OSI中由独立的三层实现。这些服务是和用户相关的认证、数据处理以及压缩。包括电子邮件、浏览器、Telnet以及其他的Internet应用。2传输层 传输层包括TCP ( Transport Control Protocol,传输控制协议)和UDP (User Datagram Protocol,用户数据报协议)。UDP几乎不进行检查,而TCP提供传输保证。与OSI中传输层不一样,TCP不保证报文的准确传输。TCP为两台主机提供高可靠性的数据通信。而另一方面,UDP则为应用层提供一种非常

22、简单的服务,它只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。任何必需的可靠性必须由应用层来提供。 3网络层 TCP/IP协议族中,网络层由以下协议组成:ICMP (Internt联网托制报文协议)、IP(网际协议)、IGMP (Internet组管理协议)、RIP, OSPF和路由的EGP网络层处理报文的路由管理。 4链路层 链路层包括ARP和RARP,负责报文传输。链路层管理网络的连接并提供网络上的报文输入/输出。表1 OSI模型0 SI参考模型层次描述OSI层次号应用层7表示层6会话层5传输层4网络层3数据链路层2物理层1 表2 TCP/IP模型TCP/

23、IP参考模型层次描述TCP/IP层次号应用层4传输层3网络层2数据链路层1 2.2 Windows Socket编程原理及操作步骤Windows Sockets是Microsoft Windows的网络程序设计接口,它是从Berkeley Sockets扩展而来的,以动态链接库的形式提供给我们使用。Windows Sockets在继承了Berkeley Sockets主要特征的基础上,又对它进行了重要扩充。这些扩充主要是提供了一些异步函数,并增加了符合Windows消息驱动特性的网络事件异步选择机制。Windows Sockets 1.1和Berkeley Sockets都是基于TCP/IP协

24、议的;Windows Sockets 2从Windows Sockets 1.1发展而来,与协议无关并向下兼容,可以使用任何底层传输协议提供的通信能力,来为上层应用程序完成网络数据通讯,而不关心底层网络链路的通讯情况,真正实现了底层网络通讯对应用程序的透明。流式套接字(SOCK_STREAM)提供面向连接、可靠的数据传输服务,数据无差错、无重复的发送,且按发送顺序接收。数据报式套接字(SOCK_DGRAM)提供无连接服务。数据包以“独立包”形式发送,不提供无错保证,数据可能丢失或重复,并且接收顺序混乱。原始套接字(SOCK_RAW)。基于TCP(面向连接)的socket编程:服务器端程序:1、

25、创建套接字(socket)。2、将套接字绑定到一个本地地址和端口上(bind)。3、将套接字设为监听模式,准备接收客户请求(listen)。4、等待客户请求到来;当请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept)。5、用返回的套接字和客户端进行通信(send/recv)。6、返回,等待另一客户请求。7、关闭套接字。客户端程序:1、创建套接字(socket)。2、向服务器发出连接请求(connect)。3、和服务器端进行通信(send/recv)。4、关闭套接字。基于UDP(面向无连接)的socket编程:服务器端(接收端)程序:1、创建套接字(socket)。2、将

26、套接字绑定到一个本地地址和端口上(bind)。3、等待接收数据(recvfrom)。4、关闭套接字。客户端(发送端)程序:1、创建套接字(socket)。2、向服务器发送数据(send to)。3、关闭套接字。相关函数说明;int bind( SOCKET s, const struct sockaddr FAR *name, int namelen ); 这个函数接收三个参数。第一个参数s指定要绑定的套接字,第二个参数指定了该套接字的本地地址信息,是指向sockaddr结构的指针变量,由于该地址结构是为所有的地址家族准备的,这个结构可能(通常会)随所使用的网络协议不同而不同,所以,要用第三个

27、参数指定该地址结构的长度。 sockaddr结构定义如下: struct sockaddr u_short sa_family; char sa_data14; ; sockaddr的第一个字段sa_family指定该地址家族,在这里必须设为AF_INET。sa_data仅仅是表示要求一块内存分配区,起到占位的作用,该区域中指定与协议相关的具体地址信息。由于实际要求的只是内存区,所以对于不同的协议家族,用不同的结构来替换sockaddr。除了sa_family外,sockaddr是按网络字节顺序表示的。在TCP/IP中,我们可以用sockaddr_in结构替换sockaddr,以方便我们填写地

28、址信息。sockaddr_in的定义如下: struct sockaddr_in short sin_family; unsigned short sin_port; struct in_addr sin_addr; char sin_zero8; ; 其中,sin_family表示地址族,对于IP地址,sin_family成员将一直是AF_INET。成员sin_port指定的是将要分配给套接字的端口。成员sin_addr给出的是套接字的主机IP地址。而成员sin_zero只是一个填充数,以使sockaddr_in结构和sockaddr结构的长度一样。如果这个函数调用成功,它将返回0。如果调用

29、失败,这个函数就会返回一个SOCKET_ERROR,错误信息可以通过WSAGetLastError函数返回。 将IP地址指定为INADDR_ANY,允许套接字向任何分配给本地机器的IP地址发送或接收数据。多数情况下,每个机器只有一个IP地址,但有的机器可能会有多个网卡,每个网卡都可以有自己的IP地址,用INADDR_ANY可以简化应用程序的编写。将地址指定为INADDR_ANY,允许一个独立应用接受发自多个接口的回应。如果我们只想让套接字使用多个IP中的一个地址,就必须指定实际地址,要做到这一点,可以用inet_addr()函数,这个函数需要一个字符串作为其参数,该字符串指定了以点分十进制格式

30、表示的IP地址(如192.168.0.16)。而且inet_addr()函数会返回一个适合分配给S_addr的u_long类型的数值。inet_ntoa()函数会完成相反的转换,它接受一个in_addr结构体类型的参数并返回一个以点分十进制格式表示的IP地址字符串。2.3 P2P网络介绍P2P技术源于局域网共享,其目标是改变人们通过服务器中转交换文件的传统方式,达到自由交换资源的目的。IBM为P2P下了如下定义:系统由若干互联协作的计算机构成,且至少具有如下特征之一:系统依存于边缘化(非中央式服务器)设备的主动协作,每个成员直接从其他成员而不是从服务器的参与中受益;系统中成员同时扮演服务器与客

31、户端的角色;系统应用的用户能够意识到彼此的存在,构成一个虚拟或实际的群体。P2P网络是互联网整体架构的基础,互联网中最基本的 TCP/IP协议并没有客户端和服务器的概念,在通讯过程中,所有的设备都是平等的一端。P2P 技术改变了“内容”所在的位置,使其正在从“中心”走向“边缘”,也就是说不再如CS模式将内容存于主要的服务器上,而是存在所有用户的 PC 机上。广义的P2P 网络将 P2P网络划分为纯分散式 P2P网络(如gnutella模型)、超级结点式网络和混合式 P2P网络等大类。3相关函数分析与代码实现3.1多线程3.1.1 进程介绍进程:通常被定义为一个正在运行的程序的实例,是一个程序在

32、其自身的地址空间中的一次执行活动。进程是资源申请、调度和独立运行的单位,因此,它使用系统中的运行资源;而程序不能申请系统资源,不能被系统调度,也不能作为独立运行的单位,因此,它不占用系统的运行资源进程由两个部分组成:1、操作系统用来管理进程的内核对象。内核对象也是系统用来存放关于进程的统计信息的地方。2、地址空间。它包含所有可执行模块或DLL模块的代码和数据。它还包含动态内存分配的空间。如线程堆栈和堆分配空间。3.1.2 线程介绍线程由两个部分组成:1、线程的内核对象,操作系统用它来对线程实施管理。内核对象也是系统用来存放线程统计信息的地方。2、线程堆栈,它用于维护线程在执行代码时需要的所有参

33、数和局部变量。当创建线程时,系统创建一个线程内核对象。该线程内核对象不是线程本身,而是操作系统用来管理线程的较小的数据结构。可以将线程内核对象视为由关于线程的统计信息组成的一个小型数据结构。 线程总是在某个进程环境中创建。系统从进程的地址空间中分配内存,供线程的堆栈使用。新线程运行的进程环境与创建线程的环境相同。因此,新线程可以访问进程的内核对象的所有句柄、进程中的所有内存和在这个相同的进程中的所有其他线程的堆栈。这使得单个进程中的多个线程确实能够非常容易地互相通信。 3.1.3 进程与线程的关系进程是不活泼的。进程从来不执行任何东西,它只是线程的容器。若要使进程某操作,它必须拥有一个在它的环

34、境中运行的线程,此线程负责执行包含在进程的地址空间中的代码。单个进程可能包含若干个线程,这些线程都“同时” 执行进程地址空间中的代码。每个进程至少拥有一个线程,来执行进程的地址空间中的代码。当创建一个进程时,操作系统会自动创建这个进程的第一个线程,称为主线程。此后,该线程可以创建其他的线程。3.1.4多线程实现线程只有一个内核对象和一个堆栈,保留的记录很少,因此所需要的内存也很少。因为线程需要的开销比进程少,因此在编程中经常采用多线程来解决编程问题,而尽量避免创建新的进程。3.2 Hook技术3.2.1 Hook函数简介及类型Hook(钩子)是WINDOWS提供的一种消息处理机制,是指在程序正

35、常运行中接受信息之前预先启动的函数,用来检查和修改传给该程序的信息,(钩子)实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。安装钩子函数将会影响系统的性能。监测“系统范围事件”的系统钩子特别明显。因为系统在处理所有的相关事件时都将调用您的钩子函数,这样系统将会明显的减慢。HOOK链WINDOWS提供了14种不同类型的HOOKS,不同的HOOK可以处理不同的消息。例如:WH_MOUSE HOOK用

36、来监视鼠标消息。WINDOWS为这几种HOOKS维护着各自的HOOK链表。HOOK链表是一串由应用程序定义的回调函数(CALLBACK Function)队列,当某种类型的消息发生时,WINDOWS向此种类型的HOOK链的第一个函数(HOOK链的顶部)发送该消息,在第一函数处理完该消息后由该函数向链表中的下一个函数传递消息,依次向下。如果链中某个函数没有向下传送该消息,那么链表中后面的函数将得不到此消息。(对于某些类型的HOOK,不管HOOK链中的函数是否向下传递消息,与此类型HOOK联系的所有HOOK函数都会收到系统发送的消息)一些Hook子过程可以只监视消息,或者修改消息,或者停止消息的前

37、进,避免这些消息传递到下一个Hook子过程或者目的窗口。最近安装的钩子放在链的开始,而最早安装的钩子放在最后,也就是后加入的先获得控制权。HOOK的作用范围两种类型:局部和远程 一、局部钩子仅钩挂您自己进程的事件。 二、远程的钩子还可以将钩挂其它进程发生的事件。远程的钩子又有两种: 1、基于线程的 它将捕获其它进程中某一特定线程的事件。简言之,就是可以用来观察其它进程中的某一特定线程将发生的事件。 2、系统范围的 将捕捉系统中所有进程将发生的事件消息。 HOOK类型Windows共有14种HOOKS,每一种类型的Hook可以使应用程序能够监视不同类型的系统消息处理机制。下面描述所有可以利用的H

38、ook类型的发生时机。(这些常数值均可以API浏览器里查到)1、WH_CALLWNDPROC和WH_CALLWNDPROCRET HooksWH_CALLWNDPROC和WH_CALLWNDPROCRET Hooks使你可以监视发送到窗口过程的消息。系统在消息发送到接收窗口过程之前调用WH_CALLWNDPROC Hook子过程,并且在窗口过程处理完消息之后调用WH_CALLWNDPROCRET Hook子过程。WH_CALLWNDPROCRET Hook传递指针到CWPRETSTRUCT结构,再传递到Hook子过程。CWPRETSTRUCT结构包含了来自处理消息的窗口过程的返回值,同样也包括

39、了与这个消息关联的消息参数。2、WH_CBT Hook在以下事件之前,系统都会调用WH_CBT Hook子过程,这些事件包括:1. 激活,建立,销毁,最小化,最大化,移动,改变尺寸等窗口事件;2. 完成系统指令;3. 来自系统消息队列中的移动鼠标,键盘事件;4. 设置输入焦点事件;5. 同步系统消息队列事件。Hook子过程的返回值确定系统是否允许或者防止这些操作中的一个。3、WH_DEBUG Hook在系统调用系统中与其它Hook关联的Hook子过程之前,系统会调用WH_DEBUG Hook子过程。你可以使用这个Hook来决定是否允许系统调用与其它Hook关联的Hook子过程。4、WH_FOR

40、EGROUNDIDLE Hook当应用程序的前台线程处于空闲状态时,可以使用WH_FOREGROUNDIDLE Hook执行低优先级的任务。当应用程序的前台线程大概要变成空闲状态时,系统就会调用WH_FOREGROUNDIDLE Hook子过程。5、WH_GETMESSAGE Hook应用程序使用WH_GETMESSAGE Hook来监视从GetMessage or PeekMessage函数返回的消息。你可以使用WH_GETMESSAGE Hook去监视鼠标和键盘输入,以及其它发送到消息队列中的消息。6、WH_JOURNALPLAYBACK HookWH_JOURNALPLAYBACK Ho

41、ok使应用程序可以插入消息到系统消息队列。以使用这个Hook回放通过使用WH_JOURNALRECORD Hook记录下来的连续的鼠标和键盘事件。WH_JOURNALPLAYBACK Hook已经安装,正常的鼠标和键盘事件就是无效的。WH_JOURNALPLAYBACK Hook是全局Hook,它不能像线程特定Hook一样使用。WH_JOURNALPLAYBACK Hook返回超时值,这个值告诉系统在处理来自回放Hook当前消息之前需要等待多长时间(毫秒)。这就使Hook可以控制实时事件的回放。WH_JOURNALPLAYBACK是system-wide local hooks,它们不会被注射

42、到任何行程地址空间。7、WH_JOURNALRECORD HookWH_JOURNALRECORD Hook用来监视和记录输入事件。典型的,可以使用这个Hook记录连续的鼠标和键盘事件,然后通过使用WH_JOURNALPLAYBACK Hook来回放。WH_JOURNALRECORD Hook是全局Hook,它不能像线程特定Hook一样使用。WH_JOURNALRECORD是system-wide local hooks,它们不会被注射到任何行程地址空间。8、WH_KEYBOARD Hook在应用程序中,WH_KEYBOARD Hook用来监视WM_KEYDOWN and WM_KEYUP消息

43、,这些消息通过GetMessage or PeekMessage function返回。可以使用这个Hook来监视输入到消息队列中的键盘消息。9、WH_KEYBOARD_LL HookWH_KEYBOARD_LL Hook监视输入到线程消息队列中的键盘消息。10、WH_MOUSE HookWH_MOUSE Hook监视从GetMessage 或者 PeekMessage 函数返回的鼠标消息。使用这个Hook监视输入到消息队列中的鼠标消息。11、WH_MOUSE_LL HookWH_MOUSE_LL Hook监视输入到线程消息队列中的鼠标消息。12、WH_MSGFILTER 和 WH_SYSMS

44、GFILTER HooksWH_MSGFILTER 和 WH_SYSMSGFILTER Hooks使我们可以监视菜单,滚动条,消息框,对话框消息并且发现用户使用ALT+TAB or ALT+ESC 组合键切换窗口。WH_MSGFILTER Hook只能监视传递到菜单,滚动条,消息框的消息,以及传递到通过安装了Hook子过程的应用程序建立的对话框的消息。WH_SYSMSGFILTER Hook监视所有应用程序消息。WH_MSGFILTER 和 WH_SYSMSGFILTER Hooks使我们可以在模式循环期间过滤消息,这等价于在主消息循环中过滤消息。通过调用CallMsgFilter funct

45、ion可以直接的调用WH_MSGFILTER Hook。通过使用这个函数,应用程序能够在模式循环期间使用相同的代码去过滤消息,如同在主消息循环里一样。13、WH_SHELL Hook外壳应用程序可以使用WH_SHELL Hook去接收重要的通知。当外壳应用程序是激活的并且当顶层窗口建立或者销毁时,系统调用WH_SHELL Hook子过程。WH_SHELL 共有种情况:1. 只要有个top-level、unowned 窗口被产生、起作用、或是被摧毁;2. 当Taskbar需要重画某个按钮;3. 当系统需要显示关于Taskbar的一个程序的最小化形式;4. 当目前的键盘布局状态改变;5. 当使用者

46、按Ctrl+Esc去执行Task Manager(或相同级别的程序)。按照惯例,外壳应用程序都不接收WH_SHELL消息。所以,在应用程序能够接收WH_SHELL消息之前,应用程序必须调用SystemParametersInfo function注册它自己。3.2.2 Hook子过程处理回调函数(HOOK处理子过程)为了拦截和处理特定的消息,你可以使用SetWindowsHookEx函数(下面将具体说明这些函数的声明及各种参数)在该类型的HOOK链中安装你自己的处理HOOK的子过程(回调函数)。只要您安装的钩子的消息事件类型发生,WINDOWS就将调用钩子函数。譬如您安装的钩子是WH_MOUS

47、E类型,那么只要有一个鼠标事件发生时,该钩子函数就会被调用。不管您安装的是那一类型钩子,钩子函数的原型都时是一样的,语法如下:public function MyHook(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) as long处理代码end function其中MyHook可以随便命名,其它不能变。该函数必须放在模块段。参数说明:nCode指定HOOK传入的信息类型。Hook子过程使用这个参数来确定任务。这个参数的值依赖于Hook类型,每一种Hook都有自己的Hook代码特征字符集。wParam:短整型参数。 lParam:长整型参数。wParam,iParam的取值随nCode不同而不同,它代表了某种类型的HO

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号