Frage

Ich verwende den folgenden Code, um einen Mausklick zu simulieren:

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);
}

Ich kann im Grunde denselben Code verwenden, um einen Control-Klick (Rechtsklick) auszuführen, indem ich Folgendes ändere:

kCGEventLeftMouseDown

kCGEventLeftMouseUp

kCGMouseButtonLeft

zu ihren jeweiligen „richtigen“ Ereignissen.Die Funktion sieht etwa so aus:

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

Aber wie wäre es mit einem Doppelklick?Ich habe versucht, zwei Linksklicks zu senden und PostMouseEvent() zweimal hintereinander aufzurufen, aber kein Erfolg.Wie führt man einen Doppelklick aus?

Danke!

War es hilfreich?

Lösung

Einblick in CGEventSetIntegerValueField(event, kCGMouseEventClickState, clickCount).Auch nachdem Sie clickCount auf 2 gesetzt haben, müssen Sie in einigen Fällen für ältere Apps möglicherweise zwei Ereignisse ausführen.

Also im Grunde genommen:

  1. Veranstaltung erstellen
  2. Setzen Sie die Klickanzahl auf 2
  3. Legen Sie den Ereignistyp auf „Mousedown and Send“ fest
  4. Legen Sie den Ereignistyp auf „Mouseup and Send“ fest
  5. Wiederholen Sie 3 und 4

Bearbeiten:

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); 
}

Andere Tipps

Dies ist ein Beispielcode zur Simulation eines Doppelklicks.

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); 

Beachte das CGEventSetIntegerValueField(theEvent, kCGMouseEventClickState, 2);geht nach den ersten Klicks nach unten und oben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top