赞 | 2 |
VIP | 143 |
好人卡 | 1 |
积分 | 1 |
经验 | 216792 |
最后登录 | 2019-10-10 |
在线时间 | 24 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 61
- 在线时间
- 24 小时
- 注册时间
- 2008-8-5
- 帖子
- 1924
|
WM_CHAR 消息是在调用 TranslateMessage 之后才发送到消息队列的,如果不调用 TranslateMessage 的话只能捕获到 WM_KEYDOWN,所以应该这样:GetMessage = Win32API.new("user32", "GetMessage", ['P', 'L', 'I', 'I'], 'I')
FindWindow = Win32API.new("user32", "FindWindowA", ['P','P'], 'L')
TranslateMessage = Win32API.new("user32", "TranslateMessage", ['P'], 'I')
hw = FindWindow.call("RGSS Player",nil)
msg = " " * 28
begin
while(GetMessage.call(msg, hw, 0, 0))
TranslateMessage.call(msg)
temp = msg.unpack("L*")
if temp[1] == 258
p "WM_CHAR", temp[2], temp[2].chr
end
end
rescue Hangup
retry
end
别调用 Graphics.update,因为这个函数可能对消息做了拦截,所以即使调用了 TranslateMessage 也无法捕获 WM_CHAR ……直接捕获 Hangup 异常来防止脚本已备份即可
上面调用了 Integer 的 chr 方法,返回 ASCII 码所对应的字符~ 系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~ |
|