OS X鼠标位置问题

时间:2011-12-14 21:51:47

标签: objective-c macos cocoa osx-lion

我试图通过在每次鼠标移动事件中将鼠标增量乘以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似乎输出正确的值......

1 个答案:

答案 0 :(得分:2)

CGPoint point = CGEventGetLocation(event); 是(0,0)是屏幕左侧顶部的点。

NSPoint old_point = [NSEvent mouseLocation]; 是(0,1)是屏幕左侧底部的点。

如果我得到屏幕高度,请执行:

'oY = abs(oY - screen_height + 1);`,oY现在基于屏幕的左上角,我的应用程序正常工作。