2009-04-07 20 views
1

Ist es in MacOS X möglich, einen Mausklick an ein bestimmtes Fenster zu senden?Mausklick auf Fenster statt auf Bildschirm simulieren

Ich habe bereits einen Klick auf den gesamten Bildschirm über CGPostMouseEvent gesendet. Die Fenster, die ich steuern möchte, überlappen sich gegenseitig, also war meine nächste Idee, das richtige Fenster nach vorne zu bringen, bevor der Klick ausgelöst wurde. Es funktioniert aber endet in einer totalen Sauerei ... ;-)

Antwort

4

Es ist möglich, Ereignisse zu Cocoa-Anwendungen über die undokumentierte

CGEventPostToPSN 

zu senden. Er postete eine kleine Anwendung on the mailing list.

customEvent = [NSEvent mouseEventWithType: [event type] 
           location: [event locationInWindow] 
          modifierFlags: [event modifierFlags] | NSCommandKeyMask 
           timestamp: [event timestamp] 
          windowNumber: WID 
            context: nil 
           eventNumber: 0 
           clickCount: 1 
           pressure: 0]; 

CGEvent = [customEvent CGEvent]; 
CGEventPostToPSN(&psn, CGEvent); 

es zu archivieren, klebte ich more source code auf pastie.org

Zum Vergleich: Die gesamte thread on cocao-dev mailing list

1

Sie können wahrscheinlich die Accessibility APIs verwenden.

Es ist ein bisschen komplizierter, aber es sollte funktionieren.

+0

Soweit ich weiß, können Sie nur AXAktion Artikel senden. Keine Mausklicks. –

+0

Warum muss es speziell ein Mausklick sein? Senden Sie AXPress an, sagen wir, eine Taste sollte gut funktionieren. –

+0

Dies funktioniert, aber beachten Sie, dass Sie vorsichtig sein sollten, um zu testen, ob das Anwendungsfenster ausgeblendet ist; es kann die Erreichbarkeit meiner Erfahrung nach brechen. –

1

Vielleicht können Sie die Window Manager API: SetUserFocusWindow() verwenden und dann das Mausereignis erstellen. Hier ist einige Codebeispiel von Dave Keck

+0

Ich habe das schon über AXAction gemacht: "AXRise". Aber es endet in einem flackernden Durcheinander von Fenstern. –

Verwandte Themen