2016-07-29 16 views
0

Ich versuche, ein Skript zu schreiben, die in der Lage sein wird, mit der rechten Maustaste auf OS X 10.11.5. Ich habe den Foundation-Rahmen zu Objective-C verwendet, um dies zu erreichen. Bisher konnte ich erfolgreich mit der linken Maustaste klicken.Post-Rechtsklick-Ereignis mit CGPostMouseEvent

Das folgende Skript kann Linksklick mit CGPostMouseEvent, deren Dokumentation in CGRemoteOperation.h gefunden werden kann.

Die Kommentare erwähnen, dass ich eine boolean_t für den letzten Parameter in CGPostMouseEvent brauche. Ich bin nicht sicher, was das bedeutet, aber ich die folgenden Kombinationen von params ohne Erfolg versucht:

(pt, 1, 1, 0, 1)
(pt, 1, 1, (0, 1))
(pt, 1, 1, 2)

Was die richtige letzte Parameter für CGPostMouseEvent ist ein rechts~~POS=TRUNC auslösen?

#import <Foundation/Foundation.h> 
#import <ApplicationServices/ApplicationServices.h> 


int main(int argc, char *argv[]) { 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    NSUserDefaults *args = [NSUserDefaults standardUserDefaults]; 
    // grabs command line arguments -x and -y 
    // 
    int x = [args integerForKey:@"x"]; 
    int y = [args integerForKey:@"y"]; 


    // The data structure CGPoint represents a point in a two-dimensional 
    // coordinate system. Here, X and Y distance from upper left, in pixels. 
    // 
    CGPoint pt; 
    pt.x = x; 
    pt.y = y; 


    // This is where the magic happens. See CGRemoteOperation.h for details. 
    // 
    // CGPostMouseEvent(CGPoint  mouseCursorPosition, 
    //     boolean_t  updateMouseCursorPosition, 
    //     CGButtonCount buttonCount, 
    //     boolean_t  mouseButtonDown, ...) 
    // 
    // So, we feed coordinates to CGPostMouseEvent, put the mouse there, 
    // then click and release. 
    // 

    CGPostMouseEvent(pt, 1, 1, 1); 
    CGPostMouseEvent(pt, 1, 1, 0); 


    [pool release]; 
    return 0; 
} 
+0

'CGPostMouseEvent' ist in Mac OS 10.6 veraltet. – Willeke

Antwort

1

CGPostMouseEvent verwendet varargs den Zustand der Tasten außer der linken Maustaste zu übergeben. Der Parameter mouseButtonDown zeigt nur an, ob die linke Maustaste gedrückt ist oder nicht. Der Status anderer Schaltflächen sollte nach mouseButtonDown im varargs-Abschnitt der Funktionssignatur übergeben werden. Für das Argument buttonCount müssen Sie die Gesamtzahl der Schaltflächenstatus übergeben, einschließlich der linken Schaltfläche.

Die folgende Sequenz sollte ein Mouse-Down-Ereignis gefolgt von einem Mouse-Up-Ereignis für die rechte Maustaste posten.

CGPostMouseEvent(pt, 1, 2, 0, 1); 
CGPostMouseEvent(pt, 1, 2, 0, 0); 

Das heißt, CGPostMouseEvent ist seit einiger Zeit veraltet. Sein Ersatz, CGEventCreateMouseEvent kombiniert mit CGEventPost, ist einfacher zu bedienen.

+0

vielen Dank! – hotPocket