Ответ 1
CGEventRef ourEvent = CGEventCreate(NULL);
point = CGEventGetLocation(ourEvent);
CFRelease(ourEvent);
NSLog(@"Location? x= %f, y = %f", (float)point.x, (float)point.y);
Мне нужно получить положение мыши на экране на 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 или перевести это.
CGEventRef ourEvent = CGEventCreate(NULL);
point = CGEventGetLocation(ourEvent);
CFRelease(ourEvent);
NSLog(@"Location? x= %f, y = %f", (float)point.x, (float)point.y);
Исходный код автора не работает, потому что он/она пытается распечатать float в% d. Правильный код:
NSPoint mouseLoc = [NSEvent mouseLocation]; //get current mouse position
NSLog(@"Mouse location: %f %f", mouseLoc.x, mouseLoc.y);
Вам не нужно идти в Carbon, чтобы сделать это.
Остерегайтесь смешивания среды NS с средой CG. Если вы получите местоположение мыши с помощью метода мыши mouseLocation, используйте CGWarpMouseCursorPosition (cgPoint), который не будет отправлен в точку на ожидаемом экране. Проблема возникает из CG, используя верхний левый как (0,0), в то время как NS использует нижний левый (0,0).
Ответ на этот вопрос в Swift
let currentMouseLocation = NSEvent.mouseLocation()
let xPosition = currentMouseLocation.x
let yPosition = currentMouseLocation.y
NSLog(@"%@", NSStringFromPoint(point));
NSLog имеет значение true;