2012-04-21 1 views
2

Je dois définir la position de la souris sur l'écran. Dans une autre question similaire, il a été suggéré d'utiliser CGDisplayMoveCursorToPoint(CGDirectDisplayID display, CGPoint point), mais je ne peux pas comprendre comment obtenir le CGDirectDisplayID. S'il vous plaît dites-moi comment obtenir le CGDirectDisplayID ou une méthode différente pour définir la position de la souris.Comment puis-je définir la position de la souris?

Répondre

1

Voici une façon de le faire:

// coordinate at (10,10) on the screen 
CGPoint pt; 
pt.x = 10; 
pt.y = 10; 

CGEventRef moveEvent = CGEventCreateMouseEvent(
    NULL,    // NULL to create a new event 
    kCGEventMouseMoved, // what type of event (move) 
    pt,     // screen coordinate for the event 
    kCGMouseButtonLeft // irrelevant for a move event 
); 

// post the event and cleanup 
CGEventPost(kCGSessionEventTap, moveEvent); 
CFRelease(moveEvent); 

Ceci déplacera le curseur sur le point (10,10) à l'écran (le haut à gauche, à côté du menu Pomme).

+0

Ne fonctionne pas. Pour une raison quelconque, il définit correctement le x de la souris, mais si j'essaie de changer le Y, il scintille entre le haut et le bas de l'écran. Même si j'utilise la position actuelle de la souris. –

+0

Je l'ai juste essayé avec une variété de valeurs 'x' et' y', et il est passé à chacun d'entre eux. Publiez-vous d'autres événements ou modifiez-vous celui-ci d'une autre manière avant de le poster? –

1

Essayez CGWarpMouseCursorPosition(). Il ne nécessite pas d'identifiant d'affichage.

Si vous voulez un ID d'affichage, vous pouvez choisir un élément, en utilisant les critères que vous voulez, dans le tableau renvoyé par [NSScreen screens]. Appelez -deviceDescription sur cet objet NSScreen. Dans le dictionnaire renvoyé, appelez -objectForKey: avec la clé @"NSScreenNumber".

1

est ici une version Swift, juste pour le plaisir:

let pt = CGPoint(x: 100, y: 10) 
let moveEvent = CGEventCreateMouseEvent(nil, .MouseMoved, pt, .Left) 
CGEventPost(.CGSessionEventTap, moveEvent); 
0

Swift 3 version de la réponse que m'a aidé:

let pt = CGPoint(x: 100, y: 10) 

let moveEvent = CGEvent(mouseEventSource: nil, mouseType: .mouseMoved, 
mouseCursorPosition: pt, mouseButton: .left) 

moveEvent?.post(tap: .cgSessionEventTap) 
Questions connexes