suixin812 发表于 2015-5-1 16:15:44

【KeyInputListener.dll】侦听皮肤窗口的按键消息

本帖最后由 suixin812 于 2015-5-1 16:34 编辑

背景


Windows 是由一个一个Win32窗口组成的,Win32窗口一个非常重要的概念是窗口消息(Window Message),
Windows系统通过向Win32窗口发送各种窗口消息来实现窗口的通信和响应


比如当你单击皮肤窗口时,鼠标硬件向Windows系统发送鼠标左键的点击信号,
Windows系统在收到鼠标信号后,向皮肤窗口发送一个WM_LBOTTONDOWN的窗口消息
(SendMessage(HWMD, Message, wParam, lParam)
皮肤窗口的WndProc函数在接收到这个消息后并执行相应的处理。
具体来说是检查鼠标点击的位置,并由该窗口的MeterWindows对象执行相应的LeftMouseDownAction选项。


这就是一个鼠标点击皮肤窗口,皮肤响应的完整过程。


虽然皮肤窗口会响应鼠标点击,但却不会响应键盘的输入信号,
原因就在于皮肤窗口的WndProc在接受到按键的窗口消息后并不会进行任何操作。
KeyInputListener.dll就是用于在此基础上侦听并处理按键的消息。




示例

Format="Key = $Key$; #crlf#Code = $Code$; #crlf#Up = $Up$; #crlf#Repeat = $Repeat$; #crlf#AltDown = $AltDown$; #crlf#CtrlDown = $CtrlDown$; #crlf#ShiftDown = $ShiftDown$; #crlf#MSG = $MSG$"


Measure=Plugin
Plugin=KeyInputListener.dll
Format=#Format#
IgnoreRepeat=1
Escape=1
KeyDownAction=[!CommandMeasure Script "KeyPress('$Key$')"][!UpdateMeter Scr][!Redraw]
CharAction=[!CommandMeasure Script "InputChar($Code$,'$Key$')"][!UpdateMeter Scr][!Redraw]
上面代码中Plugin节点下,Format选项决定了Measure的返回值。
由于KeyInputListener.dll用于侦听按键消息,因此插件会根据Format选项值返回相应信息。
这主要用于调试皮肤,但也可以与IfMatch选项配合使用。


KeyDownAction与CharAction选项分别是当键盘有按键被按下时和当有字符输入到窗口时执行的动作。
这里代码将具体的信息发送给一个Script类Measure,由脚本来判断并决定皮肤的响应。
这也是本人一贯推荐的方案——插件负责收集,Lua负责处理。





上图是示例皮肤的截图。
左上角是插件所在Measure返回的文本值,显示了最后一次侦听到的按键消息的详细内容


右侧的五个按钮展示了键盘按下时的响应,Lua的PressKey()函数根据按键信息决定高亮某个按钮。
这也是这个插件制作的最初目的,将一个皮肤行为与某个按键绑定,如刷新皮肤与F5按键绑定。


左下角则展示了CharAction选项与Lua的InputChar()函数。
脚本在这里收集了所有发送到皮肤的字符,
部分字符需要特殊处理,例如回车符、换行符、退格等。


通过Lua接收字符,可以实现更高级的用途,例如模拟控制台


插件下载

http://pan.baidu.com/s/1o6sp9W2




参考

以下内容另见示例皮肤文件夹中的说明.txt
**** Hidden Message *****





who123andi 发表于 2022-2-13 10:01:45

我回复拿一点活跃值弟弟

qww45122 发表于 2021-12-15 11:45:21

RE: 【KeyInputListener.dll】侦听皮肤窗口的按键消息 [修改]

啊久 发表于 2021-6-9 19:36:51

感谢楼主分享

胡六刀 发表于 2019-7-17 15:32:04

挺不错得啊,喜欢

咣咣咣就是干 发表于 2018-8-15 00:09:49

这主要用于调试皮肤

seaneo 发表于 2018-8-14 23:06:59

? ?? ?? ?? ?? ?? ?? ?? ?格式为:hwnd=%d,umsg=%d,wparam=%d,lparam=%d

咣咣咣就是干 发表于 2018-8-14 22:04:17

但却不会响应键盘的输入信号

seaneo 发表于 2018-8-14 21:01:28

由脚本来判断并决定皮肤的响应

咣咣咣就是干 发表于 2018-8-14 19:58:41

返回Format选项值替换所有变量后的字符串

咣咣咣就是干 发表于 2018-8-14 15:47:40

? ?? ???2 WM_CHAR
页: [1] 2 3 4
查看完整版本: 【KeyInputListener.dll】侦听皮肤窗口的按键消息