本帖最后由 无名尸 于 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 ].状态 = 假      计次循环尾 ()返回 (返回值 )
|