Domanda

Sto utilizzando il seguente codice per simulare un clic del mouse:

void PostMouseEvent(CGMouseButton button, CGEventType type, const CGPoint point) 
{
 CGEventRef theEvent = CGEventCreateMouseEvent(NULL, type, point, button);
 CGEventSetType(theEvent, type);
 CGEventPost(kCGHIDEventTap, theEvent);
 CFRelease(theEvent);
}

void LeftClick(const CGPoint point) 
{
 PostMouseEvent(kCGMouseButtonLeft, kCGEventMouseMoved, point);
 NSLog(@"Click!");
 PostMouseEvent(kCGMouseButtonLeft, kCGEventLeftMouseDown, point);
 PostMouseEvent(kCGMouseButtonLeft, kCGEventLeftMouseUp, point);
}

posso usare fondamentalmente lo stesso codice per fare un controllo-click (click destro) cambiando:

kCGEventLeftMouseDown

kCGEventLeftMouseUp

kCGMouseButtonLeft

per i rispettivi eventi "Destra". La funzione simile a:

void RightClick(const CGPoint point) 
{
 PostMouseEvent(kCGMouseButtonRight, kCGEventMouseMoved, point);
 NSLog(@"Click Right");
 PostMouseEvent(kCGMouseButtonRight, kCGEventRightMouseDown, point);
 PostMouseEvent(kCGMouseButtonRight, kCGEventRightMouseUp, point);
}

Ma, come su un doppio click? Ho provato l'invio di 2 leftclicks e chiamando PostMouseEvent () due volte di fila, ma senza fortuna. Come si esegue un doppio click?

grazie!

È stato utile?

Soluzione

Se vuoi in CGEventSetIntegerValueField(event, kCGMouseEventClickState, clickCount). Inoltre, anche dopo aver impostato il clickCount a 2, si potrebbe essere necessario eseguire 2 eventi, in alcuni casi, per le applicazioni legacy.

Quindi, in pratica:

  1. Crea evento
  2. Imposta conteggio clicca per 2
  3. Imposta tipo di evento da MouseDown e inviare
  4. Imposta tipo di evento da MouseUp e inviare
  5. Ripeti 3 e 4

Modifica:

void doubleClick(int clickCount) {
    CGEventRef theEvent = CGEventCreateMouseEvent(NULL, kCGEventLeftMouseDown, point, kCGMouseButtonLeft);  
    CGEventSetIntegerValueField(theEvent, kCGMouseEventClickState, clickCount);  
    CGEventPost(kCGHIDEventTap, theEvent);  
    CGEventSetType(theEvent, kCGEventLeftMouseUp);  
    CGEventPost(kCGHIDEventTap, theEvent);  
    CGEventSetType(theEvent, kCGEventLeftMouseDown);  
    CGEventPost(kCGHIDEventTap, theEvent);  
    CGEventSetType(theEvent, kCGEventLeftMouseUp); 
    CGEventPost(kCGHIDEventTap, theEvent); 
    CFRelease(theEvent); 
}

Altri suggerimenti

Questo è il codice di esempio per simulare un doppio clic.

CGEventRef theEvent = CGEventCreateMouseEvent(NULL, kCGEventLeftMouseDown, CGPointMake(x, y), kCGMouseButtonLeft);  
CGEventPost(kCGHIDEventTap, theEvent);  
CGEventSetType(theEvent, kCGEventLeftMouseUp);  
CGEventPost(kCGHIDEventTap, theEvent);  

CGEventSetIntegerValueField(theEvent, kCGMouseEventClickState, 2);

CGEventSetType(theEvent, kCGEventLeftMouseDown);  
CGEventPost(kCGHIDEventTap, theEvent);  

CGEventSetType(theEvent, kCGEventLeftMouseUp); 
CGEventPost(kCGHIDEventTap, theEvent); 

CFRelease(theEvent); 

Si noti che CGEventSetIntegerValueField(theEvent, kCGMouseEventClickState, 2);goes dopo la prima serie di giù, su clic.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top