Mausklick simulieren

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Mausklick simulieren

    Hi,

    ich möchte an einer bestimmten Stelle des Bildschirms einen Klick ausführen. Dazu verwende ich folgenden Code:

    Quellcode

    1. {
    2. CGEventRef click_down = CGEventCreateMouseEvent(
    3. NULL, kCGEventLeftMouseDown,
    4. CGPointMake(2093, 663),
    5. kCGMouseButtonLeft
    6. );
    7. CGEventRef click_up = CGEventCreateMouseEvent(
    8. NULL, kCGEventLeftMouseUp,
    9. CGPointMake(2093, 663),
    10. kCGMouseButtonLeft
    11. );
    12. CGEventPost(kCGHIDEventTap, click_down);
    13. CGEventPost(kCGHIDEventTap, click_up);
    14. CFRelease(click_up);
    15. CFRelease(click_down);
    16. }
    Alles anzeigen


    Wenn ich diesen Code in ein eigenständiges Test-Programm einbaue, wird an der gewünschten Stelle geklickt.
    Der exakt gleiche Code funktioniert aber in einem anderen Programm nicht, obwohl die Funktion aufgerufen wird.
    In diesem Programm wird zuvor per Applescript die Position für den Klick bestimmt.

    Woran kann es liegen, dass der Klick nur in einem Fall funktioniert???
    Oder gibt es noch andere Möglichkeiten einen Mausklick zu simulieren???

    Gruß Berthold
  • Die Positionen, die im Beispiel hart codiert sind, stimmen. Ich habe zu Testzwecken in Xcode ein neues Projekt angelegt mit dem geposteten Code in applicationDidFinishLaunching.
    Das funktioniert einwandfrei. Dann habe ich diesen Quelltext mit den festgelegten Zielkoordinaten in das Zielprogramm kopiert. Dort hat der gleiche Code keine Funktion.
    Dann habe ich den Code direkt in applicationDidFinishLaunching des Zielprogramms kopiert wieder keine Funktion.

    Ich habe zwischenzeitlich auch das Problem lokalisieren können. Auch bei meinem Testprogramm fehlt die Funktion, wenn Sandboxing aktiv ist ;(
    Das war ein echtes Eigentor und hat mich gut einen Tag gekostet. Allerdings weiß ich noch nicht wie ich das jetzt freigeben kann.
    In entitlements habe ich com.apple.systemevents eingetragen, weil dies für die System Events von Applescript notwendig war.

    Womit kann ich die MouseEvents freigeben???
  • Im Zweifelsfall einen Bugreport posten und auf 10.9 warten. Oder eine andere Möglichkeit finden.

    Wir haben bei uns auch einiges an Funktionalität streichen müssen, weil alleine die Idee schlichtweg nicht Sandbox-kompatibel war.
    if (!exit(-1)) fprintf(stderr, "exit call failed. Program will continue\n");