键盘.鼠标输入处理技术

上传人:wt****50 文档编号:38000477 上传时间:2018-04-25 格式:DOC 页数:3 大小:30KB
返回 下载 相关 举报
键盘.鼠标输入处理技术_第1页
第1页 / 共3页
键盘.鼠标输入处理技术_第2页
第2页 / 共3页
键盘.鼠标输入处理技术_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《键盘.鼠标输入处理技术》由会员分享,可在线阅读,更多相关《键盘.鼠标输入处理技术(3页珍藏版)》请在金锄头文库上搜索。

1、键盘输入处理技巧键盘输入处理技巧键盘是一个物理设备,在计算机中存在惟一的标识值与物理键盘相对应,键盘是一个物理设备,在计算机中存在惟一的标识值与物理键盘相对应, 并在键被按下或者释放时产生一个扫描码,也是唯一的标识值对应。但扫描码并在键被按下或者释放时产生一个扫描码,也是唯一的标识值对应。但扫描码 是和具体设备有关,为了使扫描码与设备无关,就产生了一个虚拟码。虚拟码是和具体设备有关,为了使扫描码与设备无关,就产生了一个虚拟码。虚拟码 是是 windows 系统定义的与设备无关的标识。系统定义的与设备无关的标识。Windows 程序是以消息机制来实现 的,键盘输入也是以消息的形式传递给程序的窗口

2、消息处理程序的。windows 用 8 中不同的消息来传递不同的键盘事件,但是在实际的应用过程中,可以忽 略其中至少一半的消息,其他的消息都由操作系统自动处理。在多数情况下, 这些消息中包含的键盘信息会多于程序所需要的。所以在对键盘消息处理的时 候,对分清那些消息是程序应该处理的,哪些消息参数是可以忽略的,这个, 使开发工作的小略大大提高了。1. 按键取 ASCII 码值1.1 实现技巧实现技巧windows 程序是消息机制的,键盘在按某个键时,会产生一个按键消息,程序是消息机制的,键盘在按某个键时,会产生一个按键消息, 这个消息被操作系统获得。程序的处理重点就是如何从操作系统捕获这个消息,这

3、个消息被操作系统获得。程序的处理重点就是如何从操作系统捕获这个消息, 从这个消息的参数中解析出所需要的值。应用程序从从这个消息的参数中解析出所需要的值。应用程序从 windows 接收的关于键盘接收的关于键盘 时间的消息称为按键消息。时间的消息称为按键消息。 按键消息,当按下一个按键时,操作系统会把 WM_KEYDOWN 或者 WM_SYSDOWN 消息放入消息队列中,当释放一个按键时,操作系统把 WM_KEYUP 或者 WM_SYSDOWN 送入应用程序的消息处理窗口。DOWN 和 UP 这一组消息通常是成对出现。如果按住某个键长时间不动,让他重复产生相 同的功能,操作系统将连续的 WM_K

4、EYUP 或 WM_SYSUP 送入应用程序的消 息处理窗口。释放该键的时候,操作系统将连续的 WM_KEYUP 或 WM_SYSUP 送入应用程序的消息处理窗口。按键之间也是有时间间隔的,通 过调用 GetMessageTime()获取按键和释放按键的时间间隔,WM_SYSDOWN 和 WM_SYSUP 是一对系统案件消息,类似的消息由系统自动处理,用户无需去 截获。产生这种消息的按键多位组合键,比如 Alt+F,Ctrl+S 等。消息原型消息 名:WM_KEYDOWN/WM_KEYUP,参数 nVirtKey=(int) wParam;lKeyData=lParam;其中,参数 wPara

5、m 是虚拟键码。这个值是由键盘驱 动程序转换扫描码获得的,它是与设备无关的,所以称为虚拟键码,大多数虚 拟吉安帕的名称在 WINUSER.H 表头文件中都定义为以 VK_开头的。注意,数数 字和字母的虚拟键码是字和字母的虚拟键码是 ASCII 码。码。Windows 程序几乎从不使用这些虚拟键码,程序几乎从不使用这些虚拟键码, 使用的是使用的是 ASCII 码字符的字符消息。参数码字符的字符消息。参数 lParam 参数含有对了解按键非常有参数含有对了解按键非常有 用的其他信息。用的其他信息。Lparam 的的 32 位分为位分为 6 个字段,其中个字段,其中 015 表示重复计数表示重复计数

6、(该消该消 息所表示的按键次数息所表示的按键次数),1623 表示表示 OEM 扫描码扫描码(由硬件产生的值由硬件产生的值),24 表示扩表示扩 充键标志;充键标志;2528 表示保留位,表示保留位,29 表示内容代码。表示内容代码。30 位表示按键先前状态,如位表示按键先前状态,如果在此之前键是释放的,则键的先前状态为果在此之前键是释放的,则键的先前状态为 0,否则为,否则为 1。31 位表示转换状态,位表示转换状态, 如果键正被按下,则转换状态为如果键正被按下,则转换状态为 0,如果键正被释放,则转换状态为,如果键正被释放,则转换状态为 1。2. 键盘钩子程序的实现2.1 钩子钩子(hoo

7、k)的原理的原理钩子(hook),是 windows 提供的一种时间钩挂技术,它允许在消息没有到 达目的程序之前先辈钩子程序截获该消息,做相应的处理后,再反悔给相应的 应用程序。所以应用程序可以在上面设置进程以监视指定窗口的某种消息,而 且所监视的窗口可以是其他进程所创建的,钩子实际上是一个处理消息的程序 段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有达到目的的 窗口前,钩子程序就先捕获该消息,即钩子程序先获得控制权。这时钩子函数 既可以加工处理该消息,也可以不处理而继续传递该消息,还可以强制结束消 息的传递。 每个钩子函数都是通过一个回调函数实现的每个钩子函数都是通过一个回调函数

8、实现的,每个钩子可以挂接多个回调 函数,构成一个函数链,最上层是最近加入的回调函数,这个链表由系统自动 维护。Hook 只监视消息,或者修改消息;而且定义的回调函数不能定义成某个 类的成员函数,只能定义为普通的 C 函数,用以监视系统或某个特定类型的事 件,这些事件可以是与某一特定线程关联的,也可以是系统中所有线程的事件。 函数原型如下: LRESULT CALLBACK HookProc( int nCode,WPARAM wParam,LPARAM lParam; ); HookProc 是应用程序定义的名字,nCode 参数是 Hook 代码,Hook 进程使 用这个参数求确定任务。这个

9、参数的值依赖于 Hook 类型,每一种 Hook 都有自 己的 Hook 代码特征字符集。wParam 和 lParam 参数的值依赖于 Hook 代码,但 是他们的典型值是包含了关于发送或者接收消息的信息。 钩子函数定义完了,就要把它安装到 windows 消息的钩子链表中,系统使 用标准 API 函数 SetWindowHookEx()来设置一个钩子函数,其函数原型如下: HHOOK SetWindowsHookEx( int idHook,HOOKPROC lpfn,HINSTANCE hMode,DWORD dwThreadId); 第一个参数 idHook,表示处理的消息类型,如 W

10、H_KEYBOAR;第二个参数 lpfn,够紫禁城的地址指针;第三个参数 hMode,应用程序实例的句柄,标识 包含 lpfn 所指的指针。第四个参数 dwThreadId 与安装钩子进程相关联的线程的 标识符,如果为 0,表示与所有线程关联,即全局钩子。函数成功则反悔钩子 进程的句柄,失败反悔 NULL。 在钩子进程中调用得到控制权的钩子函数在完成对消息的处理后,如果想 要该消息继续传递,那么它必须调用另外一个 SDK 中的 API 函数 CallNextHookEx 来传递它。这个函数反悔钩子链中下一个钩子进程的返回值。 这个函数的原型如下:LRESULT CallNextHookEx(

11、HHOOK hhk,int nCode,WPARAM wParam,LPARAM lParam); hhk 当前钩子的句柄,由 SetWindowsHookEx()函数返回。nCode 为传递给 钩子过程的事件代码。wParam 和 lParam 分别是穿个钩子进程的 wParam 值, 其具体含义与钩子类型有关。 钩子函数也可以通过直接返回 TRUE 来丢弃该消息,并阻止该消息的传递。 钩子在使用完之后需要用钩子在使用完之后需要用 UnHookWindowsHookEx()卸载,否则会造成内卸载,否则会造成内 存泄漏,函数原型如下:存泄漏,函数原型如下: UnHookWindowsHookEx(HHOOK hhk;); 函数成功返回为函数成功返回为 TRUE,否则,否则 FALSE。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号