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.
CGEventRef ourEvent = CGEventCreate(NULL);
point = CGEventGetLocation(ourEvent);
CFRelease(ourEvent);
NSLog(@"Location? x= %f, y = %f", (float)point.x, (float)point.y);
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.
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).
La réponse à cette question dans Swift
let currentMouseLocation = NSEvent.mouseLocation()
let xPosition = currentMouseLocation.x
let yPosition = currentMouseLocation.y
NSLog(@"%@", NSStringFromPoint(point));
NSLog est vrai;