设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1588|回复: 4
打印 上一主题 下一主题

【API】GetMessage的MSG结构如何处理?

 关闭 [复制链接]
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2007-2-28
帖子
152
跳转到指定楼层
1
发表于 2009-5-24 18:55:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
2
发表于 2009-5-24 19:02:24 | 只看该作者
楼主怎么又来问这个问题了,之前不是回答过你了么?
http://rpg.blue/viewthread.php?tid=121902&ntime=2009%2D5%2D24+11%3A00%3A38

调用 GetMessage 之后,temp就成了整个结构体平坦后的数据数组,第一个元素是窗口句柄,第六个元素是消息发生时的鼠标 x 坐标,第七个是 y 坐标
系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2007-2-28
帖子
152
3
 楼主| 发表于 2009-5-24 19:26:29 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
4
发表于 2009-5-24 20:13:30 | 只看该作者
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感谢您的热情解答~
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2007-2-28
帖子
152
5
 楼主| 发表于 2009-5-24 21:16:54 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-1-14 18:39

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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