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

Project1

 找回密码
 注册会员
搜索

限制鼠標API活动范圍和一个数學組合

查看数: 2684 | 评论数: 2 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2019-1-15 21:20

正文摘要:

本帖最后由 ppspssss 于 2019-1-15 22:32 编辑 https://rpg.blue/thread-168510-1-1.html <<<这个就是例子,不过不是RMXP 第一种要API方面的專家 @hyrious  @War3Badboy ...

回复

hyrious 发表于 2019-1-16 13:30:33
第一个问题见楼上代码,首先 ClipCursor 会让鼠标接触不到窗口标题栏所以只可能是外部 MoveWindow 之类的移动了窗口(没想到好的办法,每秒调一次 ClipCursor?)。。其次可以通过 GetActiveWindow 和当前 hwnd 比较来确定是否丢失焦点。

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

评分

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

查看全部评分

失落的乐章 发表于 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 认可答案

查看全部评分

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

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

GMT+8, 2024-11-27 12:47

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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