Подтвердить что ты не робот

Cocoa: получение текущей позиции мыши на экране

Мне нужно получить положение мыши на экране на Mac с помощью Xcode. У меня есть код, который предположительно делает это, но я всегда возвращаю x и y как 0:

void queryPointer()
{

    NSPoint mouseLoc; 
    mouseLoc = [NSEvent mouseLocation]; //get current mouse position

    NSLog(@"Mouse location:");
    NSLog(@"x = %d",  mouseLoc.x);
    NSLog(@"y = %d",  mouseLoc.y);    

}

Что я делаю неправильно? Как вы получаете текущую позицию на экране? Кроме того, в конечном итоге эта позиция (сохраненная в NSPoint) должна быть скопирована в CGPoint для использования с другой функцией, поэтому мне нужно получить это как координаты x, y или перевести это.

4b9b3361

Ответ 1

CGEventRef ourEvent = CGEventCreate(NULL);
point = CGEventGetLocation(ourEvent);
CFRelease(ourEvent);
NSLog(@"Location? x= %f, y = %f", (float)point.x, (float)point.y);

Ответ 2

Исходный код автора не работает, потому что он/она пытается распечатать float в% d. Правильный код:

NSPoint mouseLoc = [NSEvent mouseLocation]; //get current mouse position
NSLog(@"Mouse location: %f %f", mouseLoc.x, mouseLoc.y);

Вам не нужно идти в Carbon, чтобы сделать это.

Ответ 3

Остерегайтесь смешивания среды NS с средой CG. Если вы получите местоположение мыши с помощью метода мыши mouseLocation, используйте CGWarpMouseCursorPosition (cgPoint), который не будет отправлен в точку на ожидаемом экране. Проблема возникает из CG, используя верхний левый как (0,0), в то время как NS использует нижний левый (0,0).

Ответ 4

Ответ на этот вопрос в Swift

let currentMouseLocation = NSEvent.mouseLocation()
let xPosition = currentMouseLocation.x
let yPosition = currentMouseLocation.y

Ответ 5

NSLog(@"%@", NSStringFromPoint(point));

NSLog имеет значение true;