1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Apfel-TAB switching programmiert

Dieses Thema im Forum "AppleScript" wurde erstellt von Yeti, 05.06.07.

  1. Yeti

    Yeti Gast

    Hallo,

    ich würde gerne "im Coding" (Cocoa/Carbon) ein Apfel(Command)-Tab auslösen. Es soll also ein Applikation-Switch erfolgen. Irgendeine Idee in welche Richtung ich da Suchen muss?

    Danke schonmal und viele Grüsse,
    Michael
     
  2. Daisy

    Daisy Uelzener Rambour

    Dabei seit:
    14.01.06
    Beiträge:
    366
    Hi Yeti,
    so sollte das gehen (ApplicationServices):

    CGPostKeyboardEvent (0, (CGKeyCode)55,TRUE);
    CGPostKeyboardEvent (0,(CGKeyCode)48, TRUE);
    CGPostKeyboardEvent (0,(CGKeyCode)48, FALSE);
    CGPostKeyboardEvent (0, (CGKeyCode)55,FALSE);

    Grüße,

    D.
     
  3. Yeti

    Yeti Gast

    Hallo Daisy,

    funktioniert prima! Danke!

    Gruss,
    Yeti
     
  4. pepi

    pepi Cellini

    Dabei seit:
    03.09.05
    Beiträge:
    8.741
    Ich weis ja nicht in welcher "Sprache" Du das "was" programmieren willst, aber es gibt deutlich bessere Wege um von einem Programm auf ein anderes zu wechseln als Tasteneingaben zu simulieren.
    Gruß Pepi
     
  5. Yeti

    Yeti Gast

    "Sprache" siehe oben: Cocoa/Carbon. Ich habe versucht einen guten Weg zu finden und bin leider gescheitert. Ideen waren Nachrichten an das Dock zu schicken o.ä.. Der Weg den Daisy gezeigt hat funktioniert, wenn Du noch weitere Alternativen kennst lerne ich gerne dazu, nur her damit! :)

    In dem Zusammenhang war ich auch auf der Suche nach einer kompletten NS*-Klassen und Funktionsübersicht. Konnte leider aber weder online noch in diversen Büchern nichts finden!? Kennt/hat jemand sowas?

    Viele Grüsse,
    Yeti
     
  6. pepi

    pepi Cellini

    Dabei seit:
    03.09.05
    Beiträge:
    8.741
    Weder Cocoa noch Carbon sind Sprachen sondern es sind Frameworks. Ich weis noch immer nicht ob Du diese nun in Objective-C, Java, AppleScript oder auch Python programmierst.

    Dokumentation:
    Wirf mal einen Blick in die ADC Reference Library auf Deiner Platte.
    Mit AppKiDo hast Du auch eine Cocoa API Referenz.
    Alternativ Cocoa Browser mit dem neuen Beta Widget Zusatz.
    Gruß Pepi
     
  7. Yeti

    Yeti Gast

    Hallo Pepi,

    Korrekt und richtig, da bin ich wohl zu sehr den Standardsprachen verhaftet, dass mir die anderen Möglichkeiten nicht in den Sinn kamen - mein Fehler. Sprachen in dem Projekt für das ich die Funktionalität brauche sind Objective-C, C, C++.
    Allerdings ist mir nicht ganz klar welche Relevanz die Sprache bei der Lösung meines Problems hat, ausser, dass ich ggf. aus Java nicht alle Cocoa APIs nutzen kann... sollte es dies sein, dann bin ich wohl auf der sicheren Seite ;). Ok, das Coding sieht dann auch noch anders aus je nach Sprache... aber mir würden sogar schon Hinweise auf die entsprechenden APIs reichen :)

    Also wenn Du eine elegantere Lösung (ggf. in Objective-C) hast, wäre ich sehr daran interessiert.


    Die Refrenz bietet IMHO keinen guten Überblick - eben eine Referenz. Bisher hat sie ja auch immer prima gereicht (mit hilfe von google, dem SampleCode-Archiv, cocoadev, ...). Eine thematisch sortierte Liste mt allen Klassen und ein Satz als Beschreibung ist das wonach ich gesucht habe. Der Cocoa Browser kommt dem schon sehr nahe. Danke für den Tipp!

    Viele Grüsse,
    Yeti
     
  8. Daisy

    Daisy Uelzener Rambour

    Dabei seit:
    14.01.06
    Beiträge:
    366
    Hi Yeti,

    fertigen Code habe ich leider nicht, aber ich denke, mit dem Process Manager solltest du weiterkommen. Processes.h bietet dazu folgendes:

    mit GetNextProcess() kannst du dir eine Liste aller laufenden Prozesse basteln (Liefert die ProcessSerialNumber - als Anfangswert kNoProcess übergeben und für das Ende auf procNotFound testen ...)

    Mit GetCurrentProcess() und SameProcess() kannst du dann feststellen, wo dein Prozess in der Liste ist. (Wenn dein Programm frontmost ist, dann nehme ich an, am Ende) ...

    und mit SetFrontProcess() holst du dann den gewünschten (nächsten) Prozess nach vorne.

    Ich hoffe, das klappt so - wie gesagt, ausprobiert habe ich's nicht. Aber vielleicht hat Pepi ja was Besseres/Einfacheres/Fertiges ;)

    Grüße,

    Daisy
     

Diese Seite empfehlen