Untermenü für Dienste

Ich habe eine kleine Anwendung geschrieben und möchte anderen Anwendungen erlauben, Daten mit ihr zu teilen.

Meine erste Idee war, es in das Servicemenü zu integrieren. Ich benötige jedoch dynamisch gefüllte Untermenüs und die Apple-Entwicklungsseite für Systemdienste gibt an, dass seit 10.6 "keine Untermenüs im Menü "Dienste" vorhanden sind".

Gibt es Alternativen, um sich in das Kontextmenü anderer Anwendungen zu integrieren und Untermenüs zu haben?

Antworten (3)

Eine andere Alternative wäre, nur die Dienste der obersten Ebene verfügbar zu machen und es dann in die Verantwortung Ihrer App zu legen, die Auswahlmöglichkeiten des „Untermenüs“ anzuzeigen.

Dies hat den Vorteil, dass Sie die Kontrolle über Tastaturkürzel für die sekundären Auswahlmöglichkeiten haben. Der Benutzer erhält auch eine übersichtlichere Liste von Diensten.

So werde ich wahrscheinlich vorgehen, da die anderen Lösungen auch keine dynamische Erstellung von Einträgen zulassen.

Eine Alternative könnte das AppleScript-Menü sein. Es präsentiert alle Skripte im ~/Library/Scripts/Ordner und behält die Hierarchie der Unterordner bei.

Themen:

  • Sie müssten AppleScript-Unterstützung in Ihre App einbauen.
  • Sie müssten eine Reihe von AppleScripts erstellen, um Ihre Funktionalität verfügbar zu machen.
  • Das AppleScript-Menü ist standardmäßig deaktiviert.
  • Es ist ein klumpiger Hack.
Nette Idee, erlaubt aber keine dynamische Bestückung von Untermenüs (sorry, dass ich diese Anforderung gerade jetzt hinzugefügt habe!).

Ein besserer Ort zum Fragen ist wahrscheinlich das Programmiererforum https://stackoverflow.com/questions/tagged/osx

Aber ohne weiteres denke ich, dass Sie ein paar verschiedene Varianten davon machen können, dass .appjeder seine eigene Service-Aktion registriert. Diese Varianten könnten dann Ihre „Haupt“-App starten, um die schwere Arbeit zu erledigen.

Diese Varianten könnten in der Hauptanwendung gebündelt werden , wie ich hier einige Beispiele sehe:

/Applications/Adium.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/finish_installation.app
/Applications/Android File Transfer.app/Contents/Frameworks/Breakpad.framework/Versions/A/Resources/crash_report_sender.app
/Applications/Android File Transfer.app/Contents/Resources/Android File Transfer Agent.app
/Applications/Android File Transfer.app/Contents/Resources/Android File Transfer Agent.app/Contents/Frameworks/Breakpad.framework/Versions/A/Resources/crash_report_sender.app
/Applications/Google Chrome Canary.app/Contents/Versions/26.0.1400.0/Google Chrome Framework.framework/Resources/app_mode_loader.app
/Applications/Google Chrome Canary.app/Contents/Versions/26.0.1400.0/Google Chrome Framework.framework/Resources/crash_report_sender.app
/Applications/Google Chrome Canary.app/Contents/Versions/26.0.1400.0/Google Chrome Helper EH.app
/Applications/Google Chrome Canary.app/Contents/Versions/26.0.1400.0/Google Chrome Helper NP.app
/Applications/Google Chrome Canary.app/Contents/Versions/26.0.1400.0/Google Chrome Helper.app
/Applications/Quicksilver.app/Contents/Resources/QSDroplet.app
/Applications/Stainless.app/Contents/Helpers/StainlessClient.app
/Applications/Firefox.app/Contents/MacOS/crashreporter.app
/Applications/Firefox.app/Contents/MacOS/plugin-container.app
/Applications/Firefox.app/Contents/MacOS/updater.app
/Applications/TextMate.app/Contents/SharedSupport/Bundles/ActionScript.tmbundle/Support/bin/XTrace.app
/Applications/TextMate.app/Contents/SharedSupport/Support/bin/CocoaDialog.app
/Applications/TextMate.app/Contents/SharedSupport/Support/bin/CommitWindow.app
/Applications/Xcode.app/Contents/Applications/Accessibility Inspector.app
/Applications/Xcode.app/Contents/Applications/Application Loader.app
/Applications/Xcode.app/Contents/Applications/FileMerge.app
/Applications/Xcode.app/Contents/Applications/Instruments.app
/Applications/Xcode.app/Contents/Applications/OpenGL ES Performance Detective.app
Wusste nichts von dieser Möglichkeit, toller Fund! Aber es erlaubt keine dynamische Bestückung von Untermenüs (Entschuldigung, dass ich diese Anforderung gerade jetzt hinzugefügt habe!)