Какао:Получение текущего положения мыши на экране
Вопрос
Мне нужно получить положение мыши на экране 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 верен;