Cacao: Obtenir la position actuelle de la souris sur l'écran

J'ai besoin d'obtenir la position de la souris sur l'écran sur un Mac avec Xcode. J'ai du code qui le fait soi-disant Mais je renvoie toujours x et y comme 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 de mal? Comment obtenez-vous la position actuelle sur l'écran? En outre,en fin de Compte, cette position (enregistrée dans un NSPoint) doit être copiée dans un CGPoint pour être utilisée avec une autre fonction, donc j'ai besoin de l'obtenir soit en coordonnées x, y, soit en traduire ceci.

27
demandé sur Gilles 2009-07-13 02:10:10

5 réponses

Le code d'origine de L'auteur ne fonctionne pas car il / elle tente d'imprimer flottant comme %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 au carbone pour faire cela.

57
répondu MarcWan 2015-05-13 15:56:06
CGEventRef ourEvent = CGEventCreate(NULL);
point = CGEventGetLocation(ourEvent);
CFRelease(ourEvent);
NSLog(@"Location? x= %f, y = %f", (float)point.x, (float)point.y);
24
répondu wonderer 2016-05-26 17:36:22

Attention à mélanger L'environnement NS avec L'environnement CG. Si vous obtenez l'emplacement de la souris avec la méthode NS mouseLocation, utilisez CGWarpMouseCursorPosition (cgPoint) vous ne serez pas envoyé au point sur l'écran que vous attendiez. Le problème résulte du fait que CG utilise top left as (0,0) tandis que NS utilise bottom left as (0,0).

12
répondu user3581648 2014-04-28 14:20:12

La réponse à cette question dans Swift

let currentMouseLocation = NSEvent.mouseLocation()
let xPosition = currentMouseLocation.x
let yPosition = currentMouseLocation.y
5
répondu Andre Yonadam 2016-05-28 05:57:58
NSLog(@"%@", NSStringFromPoint(point));

NSLog est vrai;

0
répondu Vladimir Prigarin 2016-02-12 12:11:17