2012-03-24 14 views
1

Ok, ich habe ein kleines Dienstprogramm mit AppleScript erstellt und mit Automator eine Anwendung (MyApp.app) erstellt. Ich möchte eine Menüleiste erstellen (Menü, Menü Extra), die MyApp.app einfach startet, wenn Sie darauf klicken.Wie erstellt man eine Menüleiste, die eine App startet?

Ich verstehe, dass ich eine Art .menu Datei erstellen muss, die in/System/Library/CoreServices/Menu Extras Ordner geht.

Ich habe Xcode-Setup, aber nicht wirklich sicher, wo ich anfangen muss. Alles, was ich gegoogelt habe, ist das Hinzufügen und Entfernen vorhandener Menüpunkte, die bereits im Ordner "Extras" enthalten sind.

Alle Hinweise, Tipps, Tutorials oder Code geschätzt!

BEARBEITEN: Ich möchte nicht das AppleScript aus dem kleinen Skript Menüleiste Element ausführen ... Ich möchte eine separate Menüleiste Element, das die Anwendung gestartet wird.

EDIT: Ich spreche über die Menüleiste in der oberen rechten Ecke, nicht das Dock.

EDIT: Ich möchte in der Lage sein, eine Verknüpfung oder einen Schnellstartknopf zu einer Anwendung zu erstellen, so dass ein Klick auf das Symbol in der Menüleiste die Anwendung starten wird. Ich will oder brauche keine Dropdown-Menüs, die mit dem Menüleistenelement verknüpft sind ... Ein-Klick = Anwendung starten.

+0

Ich nehme an, du meinst, dass du das programmatisch machen willst? – Bill

+0

@Bill Wenn du meinst ein Programm schreiben, dann mach es ja. Aber wie sonst würdest du es tun? – jsherk

+0

Sie würden es einfach dorthin ziehen. Ich nehme an, Sie sprechen über das Dock? Wenn nicht, tut mir leid wegen des Missverständnisses. – Bill

Antwort

1

Sie suchen nach einem Statuselement - siehe Status Bar Programming Topics. Ein älteres (Xcode 3, aber es gibt nicht viel) Tutorial finden Sie here.

+0

Ich werde jetzt durch diese lesen. Danke – jsherk

+0

Dies war die erste Antwort und scheint die meisten Informationen zu haben, die ich brauchen würde, aber es erklärt immer noch nicht, wie man eine .menu Datei erstellt, die in den CoreServices/MenuExtras Ordner geht. – jsherk

+0

Menü Extras sind eine private Apple-Sache - die dokumentierte NSStatusItem-Klasse verfügt nicht über alle Features. Sie sollten auf jeden Fall vom Ordner/System weg bleiben. –

1

Schritt-für-Schritt:

  1. Set Application is agent (UIElement)-YES in Ihrem in info.plist Datei
  2. UKLoginItemRegistry von Uli Kusterer Website erhalten, wenn Sie das Menü wollen bei der Anmeldung zeigen (optional ; aber das ist die Art und Weise wollen Sie wahrscheinlich es)
  3. Implementieren eines NSMenu (mit den Einzelteilen tun, was Sie brauchen) in Ihrem XIB und schließen Sie es als Auslass (statusMenu), um Ihre Haupt-App Delegierter
  4. die Status Bar Menu in Ihrer AppDelegate.m Datei einstellen, wie folgt aus:

- (BOOL)isAppSetToRunAtLogon { 
    int ret = [UKLoginItemRegistry indexForLoginItemWithPath:[[NSBundle mainBundle] bundlePath]]; 
    return (ret >= 0); 
} 

- (void) runAtLogon 
{ 
    [UKLoginItemRegistry addLoginItemWithPath:[[NSBundle mainBundle] bundlePath] hideIt: NO]; 
} 

- (void) removeFromLogon 
{ 
    [UKLoginItemRegistry removeLoginItemWithPath:[[NSBundle mainBundle] bundlePath]]; 
} 

-(void)awakeFromNib { 

    if (![self isAppSetToRunAtLogon]) 
    { 
     [self runAtLogon]; 
    } 

    statusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength] retain]; 
    [statusItem setMenu:statusMenu]; 

    NSImage* statusImage = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"YOUR_STATUS_MENU_ICON" ofType:@"icns"]]; 

    [statusImage setSize:NSMakeSize(20, 20)]; 

    [statusItem setImage:[statusImage retain]]; 

    [statusItem setHighlightMode:YES]; 
} 

Und ... das ist es! :-)

+0

ok, ein bisschen komplexer als ich gehofft hatte ... wo setze ich den Anwendungsnamen, den ich ausführen möchte, wenn ich auf das Symbol in der Menüleiste klicke? – jsherk

+0

@jsherk Hoppla, ich habe eigentlich nicht verstanden, was du oben gemeint hast. Sie setzen keinen Anwendungsnamen ... irgendwo ... was der obige Code macht, ist ein Menü in der Statusleiste einzurichten ... das ist alles. Was die Menüpunkte tun, wird wie üblich durch die Aktionen definiert, die Sie mit ihnen verbinden (via Interface Builder). ;-) –

+0

Verwenden Sie UKLoginItemRegistry nicht. Es verwendet die alte [deprecated] (http://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLoginItems.html) LoginItemsAE-Implementierung; die modernen, unterstützten Wege (es gibt zwei) sind dokumentiert [im Daemons and Services Programming Guide] (http://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLoginItems.html) . –

Verwandte Themen