我试图通过在每次鼠标移动事件中将鼠标增量乘以1到0之间的数字来以编程方式减慢鼠标光标的速度。它对X轴工作正常,但Y位置总是移回屏幕中心,这非常奇怪。
我似乎无法弄清楚无论你向上还是向下移动鼠标,光标的Y位置都会向屏幕中心移动...
我为鼠标移动事件设置了一个CGEventTap,这是回调的代码:
CGEventRef
mouse_filter(CGEventTapProxy proxy, CGEventType type, CGEventRef event, float *speed_modifier) {
CGPoint point = CGEventGetLocation(event);
NSPoint old_point = [NSEvent mouseLocation];
CGPoint target;
int tX = point.x;
int tY = point.y;
float oX = old_point.x;
float oY = old_point.y;
float dX = tX-oX;
float dY = tY-oY;
dX*=0.1, dY*=0.1;
tX = round(oX + dX);
tY = round(oY + dY);
target = CGPointMake(tX, tY);
CGWarpMouseCursorPosition(target);
return false;
}
有人可以帮我弄明白怎么做吗?
我在应用程序运行期间记录了一些值,发现oY
似乎没有包含预期值...它似乎总是接近430,通常在几个像素之内。 tY
包含看似正确的目标值,因此一个迭代中的oY
应该等于前一个tY
(它适用于X值),但是,oY
总是接近430,即使鼠标应朝向屏幕顶部移动。这让我觉得dY
在某种程度上被设置为一个值oY
会回到430左右,但我无法弄清楚这是怎么回事,因为dY
似乎输出正确的值......
答案 0 :(得分:2)
CGPoint point = CGEventGetLocation(event);
是(0,0)是屏幕左侧顶部的点。
NSPoint old_point = [NSEvent mouseLocation];
是(0,1)是屏幕左侧底部的点。
如果我得到屏幕高度,请执行:
'oY = abs(oY - screen_height + 1);`,oY现在基于屏幕的左上角,我的应用程序正常工作。