Einen Doppelklick mit CGEventCreateMouseEvent() ausführen
-
18-09-2019 - |
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!
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:
- Veranstaltung erstellen
- Setzen Sie die Klickanzahl auf 2
- Legen Sie den Ereignistyp auf „Mousedown and Send“ fest
- Legen Sie den Ereignistyp auf „Mouseup and Send“ fest
- 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.