# 【KeyInputListener.dll】侦听皮肤窗口的按键消息 - Rainmeter插件与测试 - 雨滴社区 - Powered by Discuz!
 找回密码
 点击注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 9054|回复: 38

[插件与脚本] 【KeyInputListener.dll】侦听皮肤窗口的按键消息

[复制链接]
回帖奖励 6 点活跃值 回复本帖可获得 3 点活跃值奖励! 每人限 1 次(中奖概率 70%)

签到天数: 78 天

[LV.6]常住居民II

发表于 2015-5-1 16:15:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?点击注册

x
本帖最后由 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就是用于在此基础上侦听并处理按键的消息。




示例
[Variables]
Format="Key = $Key$; #crlf#Code = $Code$; #crlf#Up = $Up$; #crlf#Repeat = $Repeat$; #crlf#AltDown = $AltDown$; #crlf#CtrlDown = $CtrlDown$; #crlf#ShiftDown = $ShiftDown$; #crlf#MSG = $MSG$"

[Plugin]
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选项配合使用。


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

KeyInputListener

KeyInputListener


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


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


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


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

KeyInputListener

KeyInputListener
插件下载

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

KeyInputListener.dll示例皮肤_1.2.0.rmskin (41.56 KB, 下载次数: 16)



参考

以下内容另见示例皮肤文件夹中的说明.txt
游客,如果您要查看本帖隐藏内容请回复






评分

参与人数 1心动值 +1 活跃值 +10 技术值 +1 收起 理由
萝莉头 + 1 + 10 + 1 我太喜欢这个资源啦(ノ°ο°)ノ

查看全部评分

回复

使用道具 举报

签到天数: 13 天

[LV.3]偶尔看看II

发表于 2022-2-13 10:01:45 | 显示全部楼层

回帖奖励 +3 点活跃值

我回复拿一点活跃值弟弟
回复

使用道具 举报

签到天数: 12 天

[LV.3]偶尔看看II

发表于 2021-12-15 11:45:21 | 显示全部楼层
RE: 【KeyInputListener.dll】侦听皮肤窗口的按键消息 [修改]
回复

使用道具 举报

签到天数: 11 天

[LV.3]偶尔看看II

发表于 2021-6-9 19:36:51 | 显示全部楼层
感谢楼主分享
回复

使用道具 举报

签到天数: 58 天

[LV.5]常住居民I

发表于 2019-7-17 15:32:04 | 显示全部楼层
挺不错得啊,喜欢
回复

使用道具 举报

该用户从未签到

发表于 2018-8-15 00:09:49 | 显示全部楼层
这主要用于调试皮肤
回复

使用道具 举报

该用户从未签到

发表于 2018-8-14 23:06:59 | 显示全部楼层
? ?? ?? ?? ?? ?? ?? ?? ?格式为:hwnd=%d,umsg=%d,wparam=%d,lparam=%d
回复

使用道具 举报

该用户从未签到

发表于 2018-8-14 22:04:17 | 显示全部楼层
但却不会响应键盘的输入信号
回复

使用道具 举报

该用户从未签到

发表于 2018-8-14 21:01:28 | 显示全部楼层
由脚本来判断并决定皮肤的响应
回复

使用道具 举报

该用户从未签到

发表于 2018-8-14 19:58:41 | 显示全部楼层
返回Format选项值替换所有变量后的字符串
回复

使用道具 举报

该用户从未签到

发表于 2018-8-14 15:47:40 | 显示全部楼层
? ?? ???2 WM_CHAR
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点击注册

本版积分规则

快速回复 返回顶部 返回列表