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

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

问题描述:

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

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

请问有什么方法实现吗?

或者思路也可以

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

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

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

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

这是在外网找到的答案:

 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