全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
键盘输入处理技巧键盘是一个物理设备,在计算机中存在惟一的标识值与物理键盘相对应,并在键被按下或者释放时产生一个扫描码,也是唯一的标识值对应。但扫描码是和具体设备有关,为了使扫描码与设备无关,就产生了一个虚拟码。虚拟码是windows系统定义的与设备无关的标识。Windows程序是以消息机制来实现的,键盘输入也是以消息的形式传递给程序的窗口消息处理程序的。windows用8中不同的消息来传递不同的键盘事件,但是在实际的应用过程中,可以忽略其中至少一半的消息,其他的消息都由操作系统自动处理。在多数情况下,这些消息中包含的键盘信息会多于程序所需要的。所以在对键盘消息处理的时候,对分清那些消息是程序应该处理的,哪些消息参数是可以忽略的,这个,使开发工作的小略大大提高了。1. 按键取ASCII码值1.1 实现技巧windows程序是消息机制的,键盘在按某个键时,会产生一个按键消息,这个消息被操作系统获得。程序的处理重点就是如何从操作系统捕获这个消息,从这个消息的参数中解析出所需要的值。应用程序从windows接收的关于键盘时间的消息称为按键消息。按键消息,当按下一个按键时,操作系统会把WM_KEYDOWN或者WM_SYSDOWN消息放入消息队列中,当释放一个按键时,操作系统把WM_KEYUP或者WM_SYSDOWN送入应用程序的消息处理窗口。DOWN和UP这一组消息通常是成对出现。如果按住某个键长时间不动,让他重复产生相同的功能,操作系统将连续的WM_KEYUP或WM_SYSUP送入应用程序的消息处理窗口。释放该键的时候,操作系统将连续的WM_KEYUP或WM_SYSUP送入应用程序的消息处理窗口。按键之间也是有时间间隔的,通过调用GetMessageTime()获取按键和释放按键的时间间隔,WM_SYSDOWN和WM_SYSUP是一对系统案件消息,类似的消息由系统自动处理,用户无需去截获。产生这种消息的按键多位组合键,比如Alt+F,Ctrl+S等。消息原型消息名:WM_KEYDOWN/WM_KEYUP,参数nVirtKey=(int)wParam;lKeyData=lParam;其中,参数wParam是虚拟键码。这个值是由键盘驱动程序转换扫描码获得的,它是与设备无关的,所以称为虚拟键码,大多数虚拟吉安帕的名称在WINUSER.H表头文件中都定义为以VK_开头的。注意,数字和字母的虚拟键码是ASCII码。Windows程序几乎从不使用这些虚拟键码,使用的是ASCII码字符的字符消息。参数lParam参数含有对了解按键非常有用的其他信息。Lparam的32位分为6个字段,其中015表示重复计数(该消息所表示的按键次数),1623表示OEM扫描码(由硬件产生的值),24表示扩充键标志;2528表示保留位,29表示内容代码。30位表示按键先前状态,如果在此之前键是释放的,则键的先前状态为0,否则为1。31位表示转换状态,如果键正被按下,则转换状态为0,如果键正被释放,则转换状态为1。2. 键盘钩子程序的实现2.1 钩子(hook)的原理钩子(hook),是windows提供的一种时间钩挂技术,它允许在消息没有到达目的程序之前先辈钩子程序截获该消息,做相应的处理后,再反悔给相应的应用程序。所以应用程序可以在上面设置进程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的,钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有达到目的的窗口前,钩子程序就先捕获该消息,即钩子程序先获得控制权。这时钩子函数既可以加工处理该消息,也可以不处理而继续传递该消息,还可以强制结束消息的传递。每个钩子函数都是通过一个回调函数实现的,每个钩子可以挂接多个回调函数,构成一个函数链,最上层是最近加入的回调函数,这个链表由系统自动维护。Hook只监视消息,或者修改消息;而且定义的回调函数不能定义成某个类的成员函数,只能定义为普通的C函数,用以监视系统或某个特定类型的事件,这些事件可以是与某一特定线程关联的,也可以是系统中所有线程的事件。函数原型如下:LRESULT CALLBACK HookProc(int nCode,WPARAM wParam,LPARAM lParam;);HookProc是应用程序定义的名字,nCode参数是Hook代码,Hook进程使用这个参数求确定任务。这个参数的值依赖于Hook类型,每一种Hook都有自己的Hook代码特征字符集。wParam和lParam参数的值依赖于Hook代码,但是他们的典型值是包含了关于发送或者接收消息的信息。钩子函数定义完了,就要把它安装到windows消息的钩子链表中,系统使用标准API函数SetWindowHookEx()来设置一个钩子函数,其函数原型如下:HHOOK SetWindowsHookEx(int idHook,HOOKPROC lpfn,HINSTANCE hMode,DWORD dwThreadId);第一个参数idHook,表示处理的消息类型,如WH_KEYBOAR;第二个参数lpfn,够紫禁城的地址指针;第三个参数hMode,应用程序实例的句柄,标识包含lpfn所指的指针。第四个参数dwThreadId与安装钩子进程相关联的线程的标识符,如果为0,表示与所有线程关联,即全局钩子。函数成功则反悔钩子进程的句柄,失败反悔NULL。在钩子进程中调用得到控制权的钩子函数在完成对消息的处理后,如果想要该消息继续传递,那么它必须调用另外一个SDK中的API函数CallNextHookEx来传递它。这个函数反悔钩子链中下一个钩子进程的返回值。这个函数的原型如下:LRESULT CallNextHookEx(HHOOK hhk,int nCode,WPARAM wParam,LPARAM lParam);hhk当前钩子的句柄,由SetWindowsHookEx()函数返回。nCode为传递给钩子过程的事件代码。wParam和lParam分别是穿个钩子进程的wParam值,其具体含义与钩子类型有关。钩子函数也
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 智慧交通系统数据分析平台方案
- 弱电智能化系统维护服务方案
- 2025青海省交通控股集团有限公司面向社会公开招聘笔试历年备考题库附带答案详解试卷2套
- 2025福建广电网络集团龙海分公司诚聘政企业务部客户经理2人笔试历年典型考点题库附带答案详解2套试卷
- 2025湖北武汉长江水资源保护科技咨询有限公司招聘2人笔试历年常考点试题专练附带答案详解2卷
- 2025浙江温州市铁投集团春季招聘12人笔试历年典型考点题库附带答案详解试卷2套
- 吊绳的施工方案
- 二年级心理团体辅导活动方案集锦
- 施工方案优化主要
- 张店美食活动策划方案
- 头颈CTA检查的护理
- 《医疗保险学》知识点整合
- 巨量千川模拟测试题库(含答案)
- 建筑材料及构配件理论考试复习题库及答案
- 2024-2025一年级上册科学教科版2.4《气味告诉我们》课件
- 高教版【中职专用】《中国特色社会主义》期末试卷+答案
- 色盲测试色盲自检
- 护师岗位竞聘述职报告
- 新生儿窒息复苏课件
- 大学生职业规划新能源汽车
- 大学生职业规划大赛成长赛道模板
评论
0/150
提交评论