Какао:Получение текущего положения мыши на экране

StackOverflow https://stackoverflow.com/questions/1117065

  •  12-09-2019
  •  | 
  •  

Вопрос

Мне нужно получить положение мыши на экране 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, либо перевести.

Это было полезно?

Решение 2

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

Другие советы

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

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

Для этого не обязательно идти в Carbon.

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

Ответ на этот вопрос в Быстрый

let currentMouseLocation = NSEvent.mouseLocation()
let xPosition = currentMouseLocation.x
let yPosition = currentMouseLocation.y
NSLog(@"%@", NSStringFromPoint(point));

NSLog верен;

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top