本帖最后由 无名尸 于 2021-4-24 02:28 编辑
DLL无窗口注入后好像就一个监视热键4能有用
但是监视热键4 输入中文后无法触发热键, 点击其他窗口或桌面,或切屏即可再次触发
用了一点时间研究观察,发现输入法中文时,会传入一个229的参数
状态表229的位置会复制255,导致最后一个关键判断失败
把229的位置写0即可解决!
|
监视热键4_回调窗口函数 | 整数型 | | |
窗口句柄 | 整数型 | | | | 消息 | 整数型 | | | | 参数1 | 整数型 | | | | 参数2 | 整数型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | 返回值 | 整数型 | | | i | 整数型 | | | 上层 | 字节型 | | | 下层 | 字节型 | | | 固定状态表 | 字节集 | | | 状态表 | 字节集 | | | 功能键状态 | 整数型 | | | 缓存表 | 字节集 | | | 临时事件 | 子程序指针 | | | 临时标识 | 整数型 | | | 计次循环首 (取数组成员数 (监视热键4_原窗口函数 ), i )如果真 (窗口句柄 = 监视热键4_所有窗口 [i ])返回值 = _回调钩子 (监视热键4_原窗口函数 [i ], 窗口句柄, 消息, 参数1, 参数2 ) 跳出循环 ()计次循环尾 ()判断 (固定状态表 = { } 或 消息 = 6 或 消息 = 7 或 消息 = 8 )上层 = 255 下层 = 0 固定状态表 = 取重复字节集 (255, 到字节集 (下层 )) 判断 (消息 = 513 )固定状态表 [1 ] = 上层 判断 (消息 = 514 )固定状态表 [1 ] = 下层 判断 (消息 = 516 )固定状态表 [2 ] = 上层 判断 (消息 = 517 )固定状态表 [2 ] = 下层 判断 (消息 = 519 )固定状态表 [4 ] = 上层 判断 (消息 = 520 )固定状态表 [4 ] = 下层 判断 (消息 = 256 或 消息 = 260 )固定状态表 [参数1 ] = 上层 判断 (消息 = 257 或 消息 = 261 )固定状态表 [参数1 ] = 下层 返回 (返回值 )如果真 (参数1 = 229 )[/i ][/i ][i ] 固定状态表 [参数1 ] = 下层 状态表 = 固定状态表 功能键状态 = 选择 (状态表 [18 ] = 上层, 1, 0 ) + 选择 (状态表 [17 ] = 上层, 2, 0 ) + 选择 (状态表 [16 ] = 上层, 4, 0 ) + 选择 (状态表 [91 ] = 上层, 8, 0 )连续赋值 (0, 状态表 [18 ], 状态表 [17 ], 状态表 [16 ], 状态表 [91 ], 状态表 [160 ], 状态表 [161 ], 状态表 [162 ], 状态表 [163 ], 状态表 [164 ], 状态表 [165 ])计次循环首 (取数组成员数 (监视热键4_信息 ), i )如果真 (监视热键4_信息 [i ].标识 ≠ 0 )如果 (功能键状态 = 监视热键4_信息 [i ].功能键 )缓存表 = 取重复字节集 (255, 到字节集 (下层 )) 如果真 (监视热键4_信息 [i ].其它键 ≠ 0 )缓存表 [监视热键4_信息 [i ].其它键 ] = 上层 如果 (监视热键4_信息 [i ].状态 )如果真 (监视热键4_信息 [i ].普通键 ≠ 0 )缓存表 [监视热键4_信息 [i ].普通键 ] = 上层 如果真 (缓存表 = 状态表 )监视热键4_信息 [i ].状态 = 假 临时事件 = 监视热键4_信息 [i ].事件子程序 临时标识 = 监视热键4_信息 [i ].标识 _关闭对象 (_创建线程 (0, 0, 临时事件, 临时标识, 0, 0 )) 监视热键4_信息 [i ].状态 = 缓存表 = 状态表 监视热键4_信息 [i ].状态 = 假 计次循环尾 ()返回 (返回值 )
|