Project1

标题: 限制鼠標API活动范圍和一个数學組合 [打印本页]

作者: ppspssss    时间: 2019-1-15 21:20
标题: 限制鼠標API活动范圍和一个数學組合
本帖最后由 ppspssss 于 2019-1-15 22:32 编辑


https://rpg.blue/thread-168510-1-1.html <<<这个就是例子,不过不是RMXP
第一种要API方面的專家 @hyrious  @War3Badboy
作者: 失落的乐章    时间: 2019-1-15 23:39
限制鼠标的活动范围可用 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)

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

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




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1