怎样限制鼠标只能水平或垂直移动
问题描述:
因为个人需求需要按住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