|
本帖最后由 鲁凯啸 于 2014-4-15 00:21 编辑
修正方法:
只需要修改 【子程序 监视处理】 ,回调子程序的参数由两个变为三个,
第三个为动作代码:1为按下,2为放开,一般情况下都必须判断该参数值为2
[e]
.版本 2
.子程序 监视处理, 整数型
.参数 nCode, 整数型
.参数 Wparam, 整数型
.参数 Lparam, 整数型
.局部变量 局_状态键, 整数型, 静态
.局部变量 局_键代码, 整数型
.局部变量 MSG, MSG
.局部变量 动作, 整数型
.如果真 (nCode = 0)
CopyMemory (MSG, Lparam, 20)
.判断开始 (MSG.标记 < 35) ' 按下
局_键代码 = MSG.虚拟码
.判断开始 (MSG.虚拟码 = 160 或 MSG.虚拟码 = 161) ' 左Shift键 和 右Shift键
局_状态键 = #Shift键
.判断 (MSG.虚拟码 = 162 或 MSG.虚拟码 = 163) ' 左Ctrl键 和 右Ctrl键
局_状态键 = #Ctrl键
.判断 (MSG.虚拟码 = 164 或 MSG.虚拟码 = 165) ' 左Alt键 和 右Alt键
局_状态键 = #Alt键
.判断 (MSG.虚拟码 = 91 或 MSG.虚拟码 = 92) ' 左Win键 和 右Win键
局_状态键 = 91
.默认
.判断结束
动作 = 1 ' 这里是修改的代码位置1
.判断 (MSG.标记 > 127) ' 放开
局_键代码 = MSG.虚拟码 ' 这里是修改的代码位置2
.判断开始 (MSG.虚拟码 = 160 或 MSG.虚拟码 = 161) ' 左Shift键 和 右Shift键
局_状态键 = 0
.判断 (MSG.虚拟码 = 162 或 MSG.虚拟码 = 163) ' 左Ctrl键 和 右Ctrl键
局_状态键 = 0
.判断 (MSG.虚拟码 = 164 或 MSG.虚拟码 = 165) ' 左Alt键 和 右Alt键
局_状态键 = 0
.判断 (MSG.虚拟码 = 91 或 MSG.虚拟码 = 92) ' 左Win键 和 右Win键
局_状态键 = 0
.默认
.判断结束
动作 = 2 ' 这里是修改的代码位置3
.默认
.判断结束
程序_Call (到整数 (集_监视事件), 局_状态键, 局_键代码, 动作) ' 这里是修改的代码位置4
.如果真结束
返回 (CallNextHookEx (集_Hook, nCode, Wparam, Lparam))
' 当然,这样修改后调用代码需要修改,一般需要判断 响应监视事件 的第三个参数为2
[/e] |
|