web-dev-qa-db-fra.com

Cocoa: Obtenir la position actuelle de la souris à l'écran

J'ai besoin de connaître la position de la souris sur l'écran d'un Mac utilisant Xcode. J'ai un code qui est censé le faire mais je retourne toujours x et y en tant que 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);    

}

Qu'est-ce que je fais mal? Comment obtenez-vous la position actuelle à l'écran? En outre, cette position (enregistrée dans un NSPoint) doit être copiée dans un CGPoint pour être utilisée avec une autre fonction. Je dois donc obtenir ceci sous forme de coordonnées x, y ou de le traduire.

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

Le code d'origine de l'auteur ne fonctionne pas car il/elle tente d'imprimer flotte en tant que% d. Le code correct serait:

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

Vous n'avez pas besoin d'aller à Carbon pour faire cela.

57
MarcWan

Attention, ne mélangez pas l'environnement NS avec l'environnement CG. Si vous obtenez l'emplacement de la souris avec la méthode NS mouseLocation, puis utilisez CGWarpMouseCursorPosition (cgPoint), vous ne serez pas envoyé au point de l'écran attendu. Le problème provient de l'utilisation de CG en haut à gauche par (0,0) alors que NS utilise en bas à gauche en tant que (0,0).

12
user3581648

La réponse à cette question dans Swift

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

NSLog est vrai;

0
Vladimir Prigarin