it-swarm.com.de

Cocoa: Abrufen der aktuellen Mausposition auf dem Bildschirm

Ich muss die Mausposition auf dem Bildschirm eines Mac mit Xcode ermitteln. Ich habe einen Code, der das angeblich macht, aber ich gebe immer x und y als 0 zurück:

void queryPointer()
{

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

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

}

Was mache ich falsch? Wie bekommt man die aktuelle Position auf dem Bildschirm? Außerdem muss letztendlich diese Position (in einem NSPoint gespeichert) in einen CGPoint kopiert werden, um mit einer anderen Funktion verwendet zu werden, sodass ich diese entweder als x-, y-Koordinaten abrufen oder übersetzen muss.

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

Der ursprüngliche Code des Autors funktioniert nicht, da er versucht, Floats als% d auszudrucken. Der richtige Code wäre:

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

Sie müssen nicht zu Carbon gehen, um dies zu tun.

57
MarcWan

Passen Sie auf, dass Sie die Umgebung NS nicht mit der CG-Umgebung mischen. Wenn Sie die Mausposition mit der Methode NS mouseLocation abrufen, verwenden Sie CGWarpMouseCursorPosition (cgPoint). Sie werden nicht an den Punkt auf dem Bildschirm gesendet, den Sie erwartet haben. Das Problem resultiert daraus, dass CG links oben als (0,0) verwendet, während NS links unten als (0,0) verwendet.

12
user3581648

Die Antwort auf diese Frage in Swift

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

NSLog ist wahr;

0