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

Project1

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

[已经解决] 限制鼠標API活动范圍和一个数學組合

[复制链接]

Lv4.逐梦者

梦石
0
星屑
14048
在线时间
2070 小时
注册时间
2016-9-20
帖子
844
跳转到指定楼层
1
发表于 2019-1-15 21:20:38 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 ppspssss 于 2019-1-15 22:32 编辑


https://rpg.blue/thread-168510-1-1.html <<<这个就是例子,不过不是RMXP
第一种要API方面的專家 @hyrious  @War3Badboy
内容仅供参考,

Lv3.寻梦者

梦石
0
星屑
3039
在线时间
1052 小时
注册时间
2011-8-16
帖子
242
2
发表于 2019-1-15 23:39:30 | 只看该作者
限制鼠标的活动范围可用 ClipCursor 函数。我随意写了一下,经测试可以正常运行,但是只要移动窗口或使窗口失去焦点,限制就会失效,必须再次调用函数。我暂时没想到好的解决方法。
RUBY 代码复制
  1. # 取得窗口句柄
  2. HWND = Win32API.new('user32', 'GetActiveWindow', nil, 'l').call
  3.  
  4. # 取得客户区矩形
  5. client_rect = "\0" * 16
  6. Win32API.new('user32', 'GetClientRect', 'lp', 'i').call(HWND, client_rect)
  7. ary = client_rect.unpack('llll')
  8. point_ul = ary[0..1].pack('ll')
  9. point_lr = ary[2..3].pack('ll')
  10. CTS = Win32API.new('user32', 'ClientToScreen', 'lp', 'i')
  11. CTS.call(HWND, point_ul)
  12. CTS.call(HWND, point_lr)
  13. client_rect = (point_ul.unpack('ll') + point_lr.unpack('ll')).pack('llll')
  14.  
  15. # 限制鼠标
  16. Win32API.new('user32', 'ClipCursor', 'p', 'l').call(client_rect)
  17.  
  18. # 解除限制
  19. Win32API.new('user32', 'ClipCursor', 'p', 'l').call(nil)

点评

最簡方法:再次調用就好了,把HWND client_rect CTS 加个全局符号$ 不想再复杂化了  发表于 2019-1-16 20:06
鼠槱还真出不了去了  发表于 2019-1-16 18:14

评分

参与人数 1星屑 +50 收起 理由
RyanBern + 50 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9617
在线时间
566 小时
注册时间
2017-9-28
帖子
208
3
发表于 2019-1-16 13:30:33 | 只看该作者
第一个问题见楼上代码,首先 ClipCursor 会让鼠标接触不到窗口标题栏所以只可能是外部 MoveWindow 之类的移动了窗口(没想到好的办法,每秒调一次 ClipCursor?)。。其次可以通过 GetActiveWindow 和当前 hwnd 比较来确定是否丢失焦点。

第二个问题是 2**10(2 的 10 次方)= 1024 种

评分

参与人数 1星屑 +50 收起 理由
RyanBern + 50 醋瞎

查看全部评分

喵喵喵
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-26 09:15

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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