ZeronoFreya
2015-08-06 09:21
采纳率: 60%
浏览 2.6k
已采纳

怎样限制鼠标只能水平或垂直移动

因为个人需求需要按住LShift时,只允许鼠标水平或垂直移动(即使物理上不是),

目前只能想到获得鼠标当前坐标,更改其x/y值,但光标会晃动。

请问有什么方法实现吗?

或者思路也可以

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • 纵横车 2015-08-06 09:47
    已采纳

    windows下的吗?可以自己记录需要固定的x/y的值,然后自己处理WM_MOUSEMOVE消息,在消息里把lParam或wParam改为你要固定的值在调用系统给的默认的消息处理函数。
    也可以用一个Timer快速的不停的检测鼠标位置,如果位置不对就把他设置回来
    或者用钩子函数截获WM_MOUSEMOVE消息,改它的参数(类似第一种方法)
    第一种只能自己的窗口里用,后两种整个桌面都可以用。

    点赞 打赏 评论
  • blownewbee 2015-08-06 09:33

    不需要限制鼠标,而你只要忽略鼠标的x或者y,而按照初始的坐标移动和改变你的界面就可以了。

    点赞 打赏 评论
  • wafstudio 2015-08-06 10:42

    在leftbuttondown消息中记录鼠标位置,MOUSEMOVE消息中,限制水平移动时y不变,限制垂直移动时x不变。

    点赞 打赏 评论
  • zuishikonghuan 2015-08-06 11:54

    直接调用ClipCursor即可,设置一条线的矩形区域即可

    点赞 打赏 评论
  • ZeronoFreya 2015-08-10 00:06

    这是在外网找到的答案:

     SetBatchLines, -1
    CoordMode, Mouse, Screen
    ~LButton::
    MouseGetPos, , OutputVarY
    While GetKeyState( "LButton" )
      ClipCursor( 1, 0, OutputVarY, A_ScreenWidth, OutputVarY )
    ClipCursor( 0 )
    Return
    
    ClipCursor( Confine=True, x1=0 , y1=0, x2=1, y2=1 ) {
      VarSetCapacity( R, 16, 0 )
      NumPut( x1, &R+0 ), NumPut( y1, &R+4 )
      NumPut( x2, &R+8 ), NumPut( y2, &R+12 )
      Return Confine ? DllCall( "ClipCursor", UInt, &R ) : DllCall( "ClipCursor" )
    }
    return
    
    点赞 打赏 评论

相关推荐 更多相似问题