计算机控制论文范文

时间:2022-10-28 17:03:34

引言:寻求写作上的突破?我们特意为您精选了4篇计算机控制论文范文,希望这些范文能够成为您写作时的参考,帮助您的文章更加丰富和深入。

计算机控制论文

篇1

锅炉微机控制系统,一般由以下几部分组成,即由锅炉本体、一次仪表、微机、手自动切换操作、执行机构及阀、滑差电机等部分组成,一次仪表将锅炉的温度、压力、流量、氧量、转速等量转换成电压、电流等送入微机,手自动切换操作部分,手动时由操作人员手动控制,用操作器控制滑差电机及阀等,自动时对微机发出控制信号经执行部分进行自动操作。微机对整个锅炉的运行进行监测、报警、控制以保证锅炉正常、可靠地运行,除此以外为保证锅炉运行的安全,在进行微机系统设计时,对锅炉水位、锅炉汽包压力等重要参数应设置常规仪表及报警装置,以保证水位和汽包压力有双重甚至三重报警装置,这是必不可少的,以免锅炉发生重大事故。

控制系统:

锅炉是一个较为复杂的调节对象,它不仅调节量多,而且各种量之间相互联系,相互影响,相互制约,锅炉内部的能量转换机理比较复杂,所以要对锅炉建立一个较为理想的数学模型比较困难。为此,把锅炉系统作了简化处理,化分为三个相对独立的调节系统。当然在某些系统中还可以细分出其它系统如一次风量控制回路,但是其主要是以下三个部分:

炉膛负压为主调量的特殊燃烧自动调节系统

锅炉燃烧过程有三个任务:给煤控制,给风控制,炉膛负压控制。保持煤气与空气比例使空气过剩系数在1.08左右、燃烧过程的经济性、维持炉膛负压,所以锅炉燃烧过程的自动调节是一个复杂的问题。对于3×6.5t/h锅炉来说燃烧放散高炉煤气,要求是最大限度地利用放散的高炉煤气,故可按锅炉的最大出力运行,对蒸汽压力不做严格要求;燃烧的经济性也不做较高的要求。这样锅炉燃烧过程的自动调节简化为炉膛负压为主参数的定煤气流量调节。

炉膛负压Pf的大小受引风量、鼓风量与煤气量(压力)三者的影响。炉膛负压太小,炉膛向外喷火和外泄漏高炉煤气,危及设备与运行人员的安全。负压太大,炉膛漏风量增加,排烟损失增加,引风机电耗增加。根据多年的人工手动调节摸索,6.5t/h锅炉的Pf=100Pa来进行设计。调节方法是初始状态先由人工调节空气与煤气比例,达到理想的燃烧状态,在引风机全开时达到炉膛负压100Pa,投入自动后,只调节煤气蝶阀,使压力波动下的高炉煤气流量趋于初始状态的煤气流量,来保持燃烧中高炉煤气与空气比例达到最佳状态。

锅炉水位调节单元

汽包水位是影响锅炉安全运行的重要参数,水位过高,会破坏汽水分离装置的正常工作,严重时会导致蒸汽带水增多,增加在管壁上的结垢和影响蒸汽质量。水位过低,则会破坏水循环,引起水冷壁管的破裂,严重时会造成干锅,损坏汽包。所以其值过高过低都可能造成重大事故。它的被调量是汽包水位,而调节量则是给水流量,通过对给水流量的调节,使汽包内部的物料达到动态平衡,变化在允许范围之内,由于锅炉汽包水位对蒸气流量和给水流量变化的响应呈积极特性。但是在负荷(蒸气流量)急剧增加时,表现却为"逆响应特性",即所谓的"虚假水位",造成这一原因是由于负荷增加时,导致汽包压力下降,使汽包内水的沸点温度下降,水的沸腾突然加剧,形成大量汽泡,而使水位抬高。汽包水位控制系统,实质上是维持锅炉进出水量平衡的系统。它是以水位作为水量平衡与否的控制指标,通过调整进水量的多少来达到进出平衡,将汽包水位维持在汽水分离界面最大的汽包中位线附近,以提高锅炉的蒸发效率,保证生产安全。由于锅炉水位系统是一个设有自平衡能力的被控对象,运行中存在虚假水位现象,实际应用中可根据情况采用水位单冲量、水位蒸汽量双重量和水位、蒸汽量、给水量三冲量的控制系统。

除氧器压力和水位调节:除氧器部分均采用单冲量控制方案,单回路的PID调节。

监控管理系统:

以上控制系统一般由PLC或其它硬件系统完成控制,而在上位计算机中要完成以下功能:

实时准确检测锅炉的运行参数:为全面掌握整个系统的运行工况,监控系统将实时监测并采集锅炉有关的工艺参数、电气参数、以及设备的运行状态等。系统具有丰富的图形库,通过组态可将锅炉的设备图形连同相关的运行参数显示在画面上;除此之外,还能将参数以列表或分组等形式显示出来。

综合分析及时发出控制指令:监控系统根据监测到的锅炉运行数据,按照设定好的控制策略,发出控制指令,调节锅炉系统设备的运行,从而保证锅炉高效、可靠运行。

篇2

会计电算化是以计算机为主的当代电子和信息技术应用于会计工作的简称,是用电子计算机代替人工实现记账、算账、查账以及对会计信息的统计、分析、判断乃至提供预测、决策等过程。发展会计电算化有利于促进会计工作规范化,提高工作质量与工作效率,更好地发挥会计职能作用。但是企业在建立了电算化会计系统后,企业会计核算和会计管理环境发生了很大变化,一些非法操作可能不留痕迹,难以发现,稍不注意就会给单位和国家造成重大损失,如果会计电算化管理系统遭到破坏,将会严重影响单位的正常业务活动。因此,对会计电算化的内部防范和控制制度的建设显得尤为重要。

一、电算化会计信息系统对内部控制的影响

会计电算化使传统的会计系统、组织机构、会计核算及内部控制制度发生了很大的变化,其中对内部控制制度的影响尤为明显。

1.电算化会计信息系统的控制内容及形式与手工会计系统存在差异。在传统的手工系统下,控制的内容主要针对经济事项本身的交易,对于一项经济业务的每个环节都要经过某些具有相应权限人员的审核和签章,控制的方式主要是通过人员的职务相分离,职权不相容的内部牵制制度来实现的。而在电算化系统下,业务处理全部以电算化系统为主,出现了计算机的安全及维护、系统管理及操作员的制度职责、计算机病毒防治等新内容。另外,电算化功能的高度集中导致了职责的集中,业务人员可利用特殊的授权文件或口令,获得某种权利或运行特定程序进行业务处理,由此引起失控而造成损失。

2.内部控制的对象发生了变化。在电算化系统下,由于会计信息的核算及处理的主体发生了变化,控制的对象也发生了变化。控制对象原来为会计处理程序及会计工作的相容性等,会计资料由不同的责任人分别记录在凭证账簿上以备查验,是以对人的控制为主;而在电算化系统下,会计数据一般集中由计算机数据处理部门进行处理,而财务人员往往只负责原始数据的收集、审核和编码,并对计算机输出的各种会计报表进行分析。这样,内控对象转变为对人与计算机二者为主。

3.控制的实现方式发生了变化。手工会计系统的内部控制以人工控制实现。电算化会计系统的内部控制则具有人工控制与程序控制相结合的特点。电算化系统许多应用程序中包含了内部控制功能,这些程序化的内部控制的有效性取决于应用程序。如程序发生差错,由于人们对程序的依赖性以及程序运行的重复性,增加了差错反复发生的可能性,使得失效控制长期不被发现,从而使系统在特定方面发生错误或违规行为的可能性加大。

4.电算化会计信息系统缺乏交易处理痕迹。手工会计系统中严格的凭证制度,在电算化会计系统中逐渐减少或消失,凭证所起到的控制功能弱化,使部分交易几乎没有“痕迹”,给控制带来一定的难度。

5.电算化会计信息系统中会计信息存储电磁化。电算化系统下,原先会计业务处理过程的凭证、汇总表、分类表等书面档案资料被计算机自动生成的会计信息以电磁信号的形式存储在磁性介质中(如光盘、硬盘等),是肉眼不可见的,很容易被删除或篡改而不会留下痕迹;另外,电磁介质易受损坏,加大了会计信息丢失或毁坏的危险。

6.网络的迅猛发展及其在财务中的进一步应用带来了许多新问题。网络技术无疑是目前IT发展的方向,电算化会计信息系统也不可避免受到其深远的影响,特别是Internet在财务软件中的应用对电算化会计信息系统的影响将是革命性的。目前财务软件的网络功能主要包括:远程报账、远程报表、远程审计、网上支付、网上催账、网上报税、网上采购、网上销售、网上银行等,实现这些功能就必须有相应的控制,从而形成电算化会计信息系统内部控制的新问题。

二、会计电算化内部控制中存在的问题

在目前的许多企业中,虽然会计电算化系统已投入使用,但其相应的内部控制还存在着一些不完善之处,主要表现在:

1.电算化系统下的会计及电算化岗位的职能权限问题。操作权限控制是一种基本的内控手段,在电算化环境下,会计业务处理大部分由计算机操作,人为控制减少,削弱了会计审核功能。有些单位的各岗位操作权限制度没有真正落实到位,有的操作员可以以不同的身份进入系统操作,使分工控制名存实亡。

2.会计人员因主观原因或技术因素造成非法操作或操作失误。这是会计电算化内部控制中的主要任务,因其系统的程序、数据、文件等很容易被仿造、复制和修改,而不会留任何痕迹,所以某些人员为了达到个人目的,利用职务之便或不按操作规程进行非法操作,如通过冒名顶替、盗取密码等手段来非法改动、销毁会计资料,给单位造成严重损失。同时,由于单位的业务人员素质不高、操作制度不规范等原因,也会造成很大风险,因会计电算化的核算是高效自动的,只要一个环节出现错误,就会引发其他环节一系列的错误。3.会计软件的安全性及保密性问题。现有的软件系统在设计、开发阶段普遍存在重功能轻安全的现象,以至软件投入运行后存在着安全隐患,如数据库呈开放状态、易于打开等。电脑的系统数据和会计信息资料有面临被不留痕迹的浏览、修改的风险,而现在许多单位缺乏操作的记录功能,出现问题后不便于追究责任。

4.会计资料的备份和保管不及时、不规范,导致财务数据丢失。在会计电算化法规中明确规定,单位应坚持每天双重备份,并分人分处保管。但在实际工作中,有的单位并没有真正落实,也没有及时打印并按规定保管凭证和账簿,致使电脑一旦出现故障或磁性介质损坏时,部分会计资料就会丢失,造成无法挽回的后果。

5.缺乏专业的系统维护人员。目前,许多会计人员对会计业务熟悉,但对计算机知识缺乏;而系统的维护人员对计算机知识熟悉,但对会计业务不够了解,使得在系统运行中的故障不能及时分析、排除。

三、完善会计电算化内部控制的几点建议

1.建立全面规范的会计基础管理工作。管理基础主要指有一套比较全面、规范的管理制度和方法,以及较完整的规范化的数据。会计基础工作主要指会计制度是否健全,核算规程是否规范,基础数据是否准确、完整等,这是搞好电算化工作的重要保证。没有很好的基础工作,电算化会计信息系统无法处理无规律、不规范的会计数据,电算化工作的开展将遇到重重困难。

2.加强组织和人员职能控制。由于电算化会计功能的相对集中,必须制定相应的组织和管理控制制度,明确职责分工,加强组织控制。

所谓组织控制就是将系统中不相容的职责进行分离,通过相互稽核、相互监督和相互制约的机制来减少错误和舞弊的可能,保证会计信息真实、可靠。企业实行电算化后,应对原有的组织机构进行调整,以适应计算机系统要求。会计工作岗位可分为基本会计岗位和电算化会计岗位。基本会计岗位与原手工系统基本保持不变。电算化岗位一般可分为系统管理、系统操作、凭证审核、系统维护等,这些岗位也可以由基本会计岗位的会计人员来兼任,但必须对职权不相容的岗位进行明确分工,不得兼任,同时各岗位人员要保持相对稳定。如专职系统操作员不能接触系统设计文件,不能兼任会计及审核工作;系统维护员不得担任系统操作和会计工作等。

3.加强系统程序操作控制和系统文件安全管理控制。为了保证系统会计数据不被随意操作,要加强系统操作和安全管理控制。从内容上来看,一般包括以下几项:设置操作权限、制定上机守则,禁止非操作人员操作;制定内部操作规程,严禁违规操作,如预防原始凭证和记账凭证等会计数据未经审核而输入计算机的措施,预防已输入计算机的原始凭证和记账凭证等未经核对而登记机内账簿的措施;数据存储和处理相隔离;建立必要的上机操作记录制度,形成上机日志;健全并严格执行防范病毒管理制度等。另外,系统文件由专人负责保管,使用和修改必须经过有关领导审批,与系统无关人员不得接触系统文件,从源头上控制会计数据信息的作。在系统开发阶段,要设置对系统操作痕迹留有记录的功能,特别是对已入账的凭证,系统只能提供留有痕迹的更改功能,对已结账的凭证与账簿以及机内账簿生成的报表数据,系统不能提供更改功能等。

4.做好电算化会计档案的管理工作。企业应根据电算化会计档案的特点,做好会计资料的收集、保存和调用等方面的工作。财务部门对于已输出的磁性介质上的会计资料应及时加贴外部标签,指定专人妥善保管、存档,并定期检查、复制,对会计档案的调用要有完善的资料借用和归还手续。另外,企业使用的会计软件也应具有强制备份的功能和一旦系统崩溃等及时恢复到最近状态的功能。

篇3

2软件系统构成

目前,医疗机构业务网软件系统主要有HIS、PACS、LIS、电子病历系统等,实现了病人从挂号、缴费到出院的全程计算机管理,机构各级领导可通过计算机调阅授权范围内的数据。互联网除了提供HTTP、FTP等传统业务外,开通机构中心内电子期刊系统也很有必要,医护人员可以到中心内电子阅览室查阅电子期刊,也可在开通互联网业务的病区计算机上查阅资料,使得医护人员继续教育手段进一步多样化。为了最大限度发挥计算机网络的功能,同时保证网络安全平稳运行,需要使用各种网络管理软件及辅助工具。在机构的网络管理软件中,主要包括网络拓扑管理、网上行为管理、流量管理、桌面管理、防病毒软件等。在这些软件的安装布置中,有些是保证网络安全平稳运行所必需的,例如防病毒软件等,有些是根据实际工作需要添加的,例如,在实际工作中,根据统计,我们发现日常工作的多数问题是工作站用户由于操作不当而引起,同时由于各用户节点遍及全院各建筑物,因此为了能够及时处理这些可以通过远程协助解决的问题,采用了远程桌面管理软件。通过这些工具,实现了准确、及时地处理问题。需要注意的是,对于疾控机构计算机网络系统而言,在采用一套新的软件时是需要十分慎重的。在安装布置一套新软件之前,需要先详细地了解该软件的工作原理、工作性能、健壮性、兼容性等特性。然后在特定范围内进行试用,针对出现的网络异常情况(如网速下降、部分掉线等)进行认真分析,确定是否是新软件引起、是否对网络安全平稳运行构成威胁及如何处理。软件安装布置完成后,系统管理员要定时收集网络性能参数,对异常及时处理防患于未然。如在ARP攻击、熊猫烧香等病毒爆发前,网络中均会出现比较明显的异常。

3网络管理

3.1安全管理对于网络的安全管理主要由以下几部分构成:权限管理、防病毒管理、设备管理等。安全管理的基本任务就是对网络的日常巡查和性能监视,如每天察看流量日志、安全日志等并进行认真分析确定有无异常情况,对网络应用软件进行及时升级更新。一个核心是制定一套完善可行的管理制度,保证每项工作都有人员具体负责,保证每一次操作都是规范和允许的。坚持对管理人员、操作人员集中培训,从而大大降低人为因素引入的安全问题。

3.2服务管理在计算机网络系统建立完成后,系统管理员应该根据实际运行情况和用户行为模式制定服务策略。例如,对于互联网网络带宽的分配,正常办公时间行政部门对带宽需求大,那么分配上就要适当倾斜,而在非办公时间,带宽就要对电子阅览室适当倾斜,因为此时有更多的人员去电子阅览室下载资料、观看视频教学等。同时为了保证网络正常使用,要对P2P应用、网络电视等进行限制。

3.3应急管理计算机网络系统作为医院信息化的基础工程,从投入使用的第一天起,就应该建立完善的应急管理机制,包括各项制度及措施。应急管理的内容不仅包括出现硬件损坏、线路故障的硬件应急措施,还应该包括异常数据流、频繁掉线等软件问题。尤其是软件问题,需要管理员借助专业的工具进行长时间的观察和分析才能找到问题所在,因此更需要事先制定详细的应急处理措施,才能保证业务系统正常运行,特别是承载信息系统的容灾和备份业务的计算网络。

篇4

监视、控制计算机的使用

基于WindowsNT/2000的应用系统中,一些关键的人机交互工作站,常需要了解并记录所有操作人员操作计算机的情况。如:在工业控制领域,一些使用计算机对设备进行监视和控制的工作站,需要非常高的可靠性和安全性。在这些工作站上通常要求只能运行系统所要求的应用程序,不能运行与系统无关的程序,同时要求对计算机操作人员的所有原始输入进行记录,以便出现事故(如操作故障、程序异常退出)的时候,用来分析是人为原因,还是系统原因造成的。基于以上需求,我们必须解决两个问题,一个是如何记录操作人员的输入,另一个是如何控制操作人员的输入。在DOS、Windows3.1、Windows95/98中都可以编写响应键盘和鼠标输入的中断处理程序,截取来自键盘和鼠标的输入,记录、分析后依情况分别处理。但是在WindowsNT和Windows2000中,这样的解决方法将不再行得通,这是因为WindowsNT/2000操作系统为了提高系统的可靠性,不再允许应用程序直接对系统设备的底层进行操作。这样,用户的应用程序将不能够对计算机的端口地址进行读写操作,所以在WindowsNT/2000操作系统中对计算机端口的读写是无效的。另外一种方法能够非常完美地解决这个问题,就是可以编写操作系统的设备驱动程序来解决,但是要编写系统的设备驱动程序,必须对WindowsNT/2000的系统底层以及整个系统架构有比较深入的了解。而且设备驱动程序的编写、调试都比较困难,同时这方面的资料也比较少。所以本文没有采取这种方法,而是采用微软公布的标准Win32函数和钩子技术来解决这个问题,比较方便而且快捷。在WindowsNT/2000操作系统中,称各种输入为事件(Event),所有的键盘、鼠标输入事件以及其他事件都是通过消息传递处理机制来得到响应的。控制、监视计算机实际上是控制、监视事件消息流。Windows操作系统为这种应用提供钩子(Hook)技术。这种技术的要点就是在操作系统的消息传递处理机制上外挂一个我们定义的函数,可以使用这个函数来监视、控制系统的事件消息流。本文采用的就是这种方法,这种方法要求将所有的程序代码放入系统可以加载的动态链接库中。下面我们以键盘输入的监视和控制为例详细叙述这种方法。其总体思路如下:首先,定义自己的钩子函数。其次,安装自定义的钩子函数,此后钩子函数在后台开始工作。一旦系统发现击键动作或者鼠标动作,系统将马上调用该自定义的钩子函数,并将事件消息传入,供程序分析判断。它可以监视所有的击键和鼠标动作,与DOS时代的中断调用有非常相似的地方。最后,卸载自定义的钩子函数。钩子函数的定义微软的钩子技术的原理就是应用程序可以在系统的消息处理机制上外挂一个子程序,在消息尚未到达目的地之前,用该子程序来截获此消息,以进行监视和控制。我们这里使用的是WH_KEYBOARD_LL类型的钩子函数,这种类型的钩子函数可以截获所有的键盘事件,即敲击键盘上的任何一个键,我们自定义的钩子函数都可以知道。该类型钩子函数要求安装自定义的钩子函数必须是以下原型:LRESULTCALLBACKLowLevelKeyboard-Proc(intnCode,WPARAMwParam,LPARAMlParam);其中各参数的含义如下:intnCode:用来决定钩子函数如何处理事件消息的代码,参数的取值为HC_ACTION时,参数wParam、lParam包含了所需的键盘消息事件信息。WPARAMwParam:键盘消息事件的类型ID。该参数有四种可能的消息类型取值:WM_KEY-DOWN,WM_KEYUP,WM_SYSKEYDOWN,WM_SYSKEYUP.LPARAMlParam:指向一个类型为KBDLLHOOKSTRUCT的结构指针。该结构容纳了底层键盘输入事件的详细信息,它的定义如下:typedefstructtagKBDLLHOOKSTRUCT{DWORDvkCode;//一个范围从1到254的虚拟键码DWORDscanCode;//键盘的硬件扫描码DWORDflags;//一系列的标志位//0比特位指示该键是不是扩展键(如:功能键,或数字小键盘上的键),1表示是,0表示否//1~3比特位保留//4比特位用来区分该事件是否来自Win32函数keybd_event()调用,1表示是,0表示否//5比特位为状态描述码,如果ALT键按下,该位是1,否则是0。//6比特位保留。//7比特位是变换状态位,键被按下为0,键被释放为1。DWORDtime;//该消息事件的时间标记。DWORDdwExtraInfo;//该消息的其他扩展信息。}KBDLLHOOKSTRUCT,FAR*LPKBDLLHOOKSTRUCT,*PKBDLLHOOKSTRUCT;实际的钩子函数的框架如下:LRESULTCALLBACKMyLowLevelKeyboardProc(intnCode,WPARAMwParam,LPARAMlParam){BOOLbSkipThisEvent=FALSE;HWNDhwndForeground;HWNDhwndFocus;DWORDdwCurrentThreadId;DWORDdwWindowThreadId;if(nCode==HC_ACTION){PKBDLLHOOKSTRUCTp=(PKBDLLHOOKSTRUCT)lParam;//系统传递来的键盘输入事件信息指针switch(wParam){caseWM_SYSKEYUP:caseWM_KEYUP://ifkeyup/*这段代码用来获得当前拥有输入焦点的窗口的窗口句柄,以便获得该窗口的相关信息*//*获得前端窗口(即用户当前正在工作的窗口)的句柄,创建该窗口的线程通常拥有比其他线程稍微高一些的优先级。*/hwndForegroud=::GetForegroundWindow();dwCurrentThreadId=::GetCurrentThreadId();//当前线程的Id//获得产生前端窗口hwndForeground的线程Id值,用来惟一表示一个线程dwWindowThreadId=::GetWindowThread-ProcessId(hwndForegroud,NULL);/*下面这一行代码非常重要,它的作用是使当前线程(dwCurrentThreadId)的输入处理机制依附到创建前端窗口的线程(dwWindowThreadId)的输入机制上,否则你将得不到当前拥有键盘输入焦点的窗口句柄。这是因为在WindowsNT/2000操作系统通常创建不同的线程来处理相互独立的输入过程,每一个输入过程都拥有自己的输入状态(焦点、键盘状态、队列状态等),通过AttachThreadInput调用,操作系统将允许调用线程获得或者设置其他线程生成窗口的输入状态信息。只有执行该系统调用,才能够得到当前拥有键盘输入焦点的窗口的窗口句柄,否则GetFocus()系统调用将返回NULL。在这一点上WindowsNT/2000与Windows9X操作系统有很大不同,这也正是WindowsNT/2000比Windows95/98操作系统可靠性、安全性更好的一个原因*/AttachThreadInput(dwCurrentThreadId,dwWindowThreadId,TRUE);////获得拥有键盘输入焦点的窗口的窗口句柄hwndFocus=::GetFocus();if(hwndFocus||hwndForeground){charwnm[256];wnm[0]=0;//变量定义后,使用之前一定要初始化。//获得该窗口的窗口标题,就是在窗口标题栏上显示的内容::GetWindowText(hwndForeground,wnm,255);charclsnm[266];clsnm[0]=0;//获得该窗口的类名字::GetClassName(hwndFocus,clsnm,255);//获得该窗口的风格LONGstyle=::GetWindowLong(hwfocus,GWL_STYLE);/*如果你只对部分窗口感兴趣的话,可以通过下面的形式进行过滤,从而只处理你所感兴趣的某些窗口的输入事件*/if((stricmp(clsnm,“edit”)==0)||(0x0020&style)||strstr(wnm,“MyTestWnd”)){//你可以在此记录供以后分析使用的相关信息LLKEY_OutputToLog(hwfore,hwfocus,wnm,clsnm,p);}}caseWM_KEYDOWN:caseWM_SYSKEYDOWN:if(p->vkCode==VK_LWIN)

*该行代码用来将键盘上的左Win系统键(就是带有微软旗帜图案的那个键,注意是左边的那个)屏蔽掉,如果在代码执行后,用户敲击键盘上的左Win系统键,将不会弹出Windows的开始菜单。你可以根据你的需要屏蔽任何你所要屏蔽的键,从而达到控制计算机使用的目的。*/bSkipThisEvent=TRUE;break;}endofswitch}//endofifif(bSkipThisEvent)//如果是需要屏蔽的键,一定要返回1给操作系统,切记。return1;elsereturnCallNextHookEx(NULL,nCode,wParam,lParam);/*调用钩子函数链,以便使其他应用程序能够正常工作*/}这里需要注意的是,如果nCode小于零,钩子函数必须返回CallNextHookEx函数调用的返回值。如果nCode>=0,建议仍然返回CallNextHookEx函数调用的返回值,否则其他安装了WH_KEYBOARD_LL钩子函数的应用程序将收不到系统发送的钩子通知,从而使其他应用程序功能发生异常。不过我们也可以利用系统的这一个特点,来屏蔽一些功能键,禁止某些系统特性,实现控制计算机使用的想法。安装钩子函数接下来的工作就是将我们定义好的钩子函数安装到系统中。用来安装用户自定义钩子函数的Win32函数是SetWindowsHookEx,该函数的原型如下:HHOOKSetWindowsHookEx(intidHook,//将要安装的钩子函数的钩子类型HOOKPROClpfn,//我们自定义的钩子函数的函数地址HINSTANCEhMod,//应用程序的实例句柄,即容纳了钩子函数的动态链接库的句柄。如果钩子函数所在地址空间在当前进程的地址空间,hMod应该为NULL.DWORDdwThreadId//钩子起作用的线程Id,如果该值为零,则对系统中所有线程都起作用);其中idHook指定了安装的钩子函数的类型,不同类型的钩子函数可完成不同应用功能,而且不同版本的Windows操作系统支持的钩子函数的种类也不尽相同,在本文我们主要介绍的是WindowsNT/2000操作系统中目前公开支持的最底层的两种钩子类型:WH_KEYBOARD_LL和WH_MOUSE_LL。这两种类型的钩子函数在WindowsNTServicesPack3及其以后的版本,包括Windows2000Professional中得到很好的支持。这两种类型的钩子函数可以分别监视底层的键盘和鼠标输入事件,在系统将事件分发到相应的接收目的地之前将它截获,交给用户自定义的钩子函数来处理。下面以键盘钩子为例详细说明,鼠标钩子与此类似,不再赘谈。在这里,我们的安装函数和我们定义的钩子函数放在同一个动态链接库中。其中g_hWin32NT_DllHandle是我们定义的全局变量,类型是Handle,在系统调用动态链接库的入口函数时,将hModule的值赋给g_hWin32NT_DllHandle。//下面是动态链接库的入口函数DllMain(HANDLEhModule,DWORDul_reason_for_call,LPVOIDlpReserved){g_hWin32NT_DllHandle=hModule;/*保存该值,以后在安装自定义钩子函数的时候要使用该值*/returnTRUE;}//下面的函数用来安装我们自定义的钩子函数HHOOKg_hhkLowLevelKybd;//以后在卸载自定义钩子函数时,要用到该值voidStartMyHook(void){g_hhkLowLevelKybd=SetWindowsHookEx(WH_KEYBOARD_LL,::MyLowLevelKeyboardProc,(HINSTANCE)g_hWin32NT_DllHandle,0);}/*g_hWin32NT_DllHandle是动态链接库的句柄,我们定义的钩子函数放在该动态链接库中。该句柄是在操作系统加载动态链接库时,由操作系统调用DllMain()传入的*/如果安装成功,系统调用将返回一个钩子函数的句柄;如果失败,将返回NULL。将来在卸载我们自定义的钩子函数时要使用该句柄。所以必须将返回值保存到一个全局变量中。安装成功后,该函数返回。从现在开始,键盘的任何击键动作都将被我们定义的钩子函数捕捉到,包括各种系统功能键。操作系统在后台将自动异步地调用我们自定义的钩子函数进行处理,并且不会影响任何当前正在进行的各种工作,也不会对系统有任何不良影响。卸载钩子函数当我们的应用程序退出时,或者不再需要钩子函数的处理时,必须卸载我们自定义的钩子函数。//下面的Win32函数用来卸载我们自定义的钩子函数UnhookWindowsHookEx(g_hhkLowLevelKybd);至此,我们已经比较完整地介绍了底层键盘钩子技术的应用方法,对于鼠标输入事件的控制与监视的方法,与此完全类似,读者可依照本文完成自己的功能。并且在你的应用程序中,可以根据需要,多次安装、卸载钩子函数。不过有一点读者要注意,就是在程序调试时,一定不要同时将这两种类型的钩子函数都进行设置,因为一旦程序处理上有错误,操作系统将不能获得任何操作消息,计算机只有重新启动。读者可以将本文介绍的方法应用到许多场合,比如在运行某些关键的任务时,为避免人机交互的干扰,可以锁定键盘和鼠标的输入。待任务完成时,再恢复正常的键盘和鼠标的输入。另外,屏蔽某些不想让用户使用的功能键等等。

友情链接