|
60精币
场景是:使用键盘钩子监测按键A按下,再执行4次按键A。因为无法区分真实键盘按键消息和模拟按键消息造成死循环,系统就卸掉了这个有问题的钩子,这种情况,如何解决?
窗口程序集名 | 保 留 | 保 留 | 备 注 | 窗口程序集_启动窗口 | | | | 变量名 | 类 型 | 数组 | 备 注 | 按下 | 逻辑型 | | 键盘钩子句柄 | 整数型 | | 按键 | 文本型 | | 间隔 | 整数型 | | 动作 | 文本型 | | 集_句柄 | 整数型 | 0 | 全_许可证 | 整数型 | |
键盘钩子句柄 = 设置系统钩子_ (13, &处理消息, 取实例句柄_ (0 ), 0 )|
处理消息 | 整数型 | | |
代码值 | 整数型 | | | | 消息值 | 整数型 | | | | 参数二 | 整数型 | | | | 拷贝内存_ (按键信息, 参数二, 28 )调试输出 (代码值, 消息值, 参数二 )判断 (消息值 = 256 )间隔 = 取启动时间 () - 间隔 动作 = “键盘按下”按键 = 键盘_键代码取键名 (按键信息.键代码 )间隔 = 取启动时间 ()启动线程 (&键盘按下, 按键信息.键代码, )调试输出 (动作 )调试输出 (按键 )判断 (消息值 = 257 )间隔 = 取启动时间 () - 间隔 动作 = “键盘放开”按键 = 键盘_键代码取键名 (按键信息.键代码 )间隔 = 取启动时间 ()启动线程 (&键盘放开, 按键信息.键代码, )调试输出 (动作 )调试输出 (按键 )判断 (消息值 = 260 且 按键信息.键代码 = 164 或 按键信息.键代码 = 165 )间隔 = 取启动时间 () - 间隔 动作 = “键盘按下”按键 = 键盘_键代码取键名 (按键信息.键代码 )间隔 = 取启动时间 ()调试输出 (动作 )调试输出 (按键 )如果真 (按键 = “A键” 且 按下 = 假)按下 = 真 计次循环首 (4, )模拟按键 ( #A键, , )延迟 (100 )计次循环尾 ()按下 = 假 返回 (呼叫下一钩子_ (键盘钩子句柄, 代码值, 消息值, 参数二 )) 计次循环首 (取数组成员数 (集_句柄 ), s )进入许可区 (全_许可证 )键盘_消息 (集_句柄 [s ], 键代码, 3, )退出许可区 (全_许可证 )调试输出 (集_句柄 [s ])延迟 (100 )计次循环尾 ()计次循环首 (取数组成员数 (集_句柄 ), s )键盘_消息 (集_句柄 [s ], 键代码, 4, )延迟 (100 )计次循环尾 ()UnhookWindowsHookEx (键盘钩子句柄 )
|
-
-
demo.e
957.06 KB, 下载次数: 3, 下载积分: 精币 -1 枚
最佳答案
查看完整内容
按键信息第三个成员跟16进行与运算 为0则这个消息是硬件产生(来自键盘),非0则是模拟按键(来自keybd_event等API产生),
当然,如果使用的是驱动级的硬件模拟也是区分不出来的。
|