2011-12-14 78 views
1

我試圖通過在每個鼠標移動事件上將鼠標增量乘以1和0之間的數字來以編程方式減慢鼠標光標。它對X軸的工作很好,但是Y位置總是移回到屏幕的中心,這非常奇怪。OS X鼠標位置問題

我似乎無法找出原因光標的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包含表面上正確的目標值,所以它從一個迭代應該等於tY(它適用於X值),但是,oY總是接近430,即使當鼠標時,oY應該朝着屏幕的頂部移動。這讓我覺得dY在某種程度上被設置爲一個值,將使oY回到約430,但我無法弄清楚這是怎麼回事,因爲dY似乎輸出正確的值以及...

回答

2

CGPoint point = CGEventGetLocation(event); 是其中(0,0)是屏幕左側頂部的點。

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

我,如果我得到了屏幕高度,並做到:

「OY = ABS(OY - SCREEN_HEIGHT + 1);`,現在基於OY關閉屏幕的左上角,和我的應用程序工作正常。