2012-03-24 2 views
1

Хорошо, я создал небольшую утилиту с AppleScript и использовал Automator, чтобы превратить ее в приложение (MyApp.app). Я хотел бы создать элемент меню (пункт меню, меню дополнительно), который просто запускает MyApp.app, когда вы нажимаете на него.Как создать элемент меню, который запустит приложение?

Я понимаю, что мне нужно создать какой-то файл .menu, который входит в папку/System/Library/CoreServices/Menu Extras.

У меня есть настройка Xcode, но не совсем уверен, где мне нужно начинать. Появился весь мой googling - как добавить и удалить существующие менулеты уже в папке «Дополнительно».

Любые подсказки, советы, учебники или код оценены!

EDIT: Я НЕ хочу запускать AppleScript из небольшого элемента меню меню скрипта ... Я хочу отдельный элемент меню, который запустит приложение.

EDIT: Я говорю о панели меню в верхнем правом углу, а не о доке.

EDIT: Я хочу иметь возможность создать ярлык или кнопку быстрого запуска приложения, чтобы один щелчок по значку в строке меню запустил приложение. Я не хочу или не нуждаюсь в выпадающих меню, связанных с элементом меню ... one-click = launch application.

+0

Предполагаю, вы хотите сказать, что хотите сделать это программно? – Bill

+0

@Bill Если вы имеете в виду написать программу, чтобы сделать это, тогда да. Но как еще вы это сделаете? – jsherk

+0

Вы бы просто перетащили его туда. Я полагаю, вы говорите о доке? Если нет, то извините за непонимание. – Bill

ответ

1

Вы ищете статусный элемент - см. Status Bar Programming Topics. Более старый (Xcode 3, но его немного), можно найти учебник here.

+0

Я прочитаю это сейчас. Спасибо – jsherk

+0

Это был первый ответ и, похоже, содержит большую часть необходимой мне информации, однако он все еще не объясняет, как сделать файл .menu, который входит в папку CoreServices/MenuExtras. – jsherk

+0

Меню Экстра - это частная вещь Apple - документальный класс NSStatusItem не обладает всеми функциями. В любом случае вы должны держаться подальше от папки/System. –

1

Шаг за шагом:

  1. Набор Application is agent (UIElement) к YES в вашем в info.plist файле
  2. Получить UKLoginItemRegistry с сайта Ули Kusterer, в, если вы хотите, чтобы меню, чтобы показать на LogOn (опционально, но именно так вы, скорее всего, захотите это сделать)
  3. Внесите NSMenu (с элементами, которые вам нужны) в ваш XIB и подключите его к розетке (statusMenu) на ваш основной App делегат
  4. Установите Status Bar Menu в файле AppDelegate.m, как это:

- (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]; 
} 

И ... вот оно! :-)

+0

ok, немного сложнее, чем я надеялся ... где установить имя приложения, которое я хочу запустить, когда я нажимаю значок в строке меню? – jsherk

+0

@jsherk Ой, я на самом деле не понял, что вы имели в виду выше. Вы не задаете ни одного имени приложения ... в любом месте ... то, что делает вышеприведенный код, - это настроить меню в строке состояния ... вот и все. То, что делают пункты меню, будет определяться любыми действиями, которые вы подключаете к ним (через Interface Builder), как обычно .. ;-) –

+0

Не используйте UKLoginItemRegistry. Он использует старую, [устаревшую] (http://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLoginItems.html) реализацию LoginItemsAE; современные поддерживаемые способы (их два) документированы [в Руководстве по программированию демонов и сервисов] (http://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLoginItems.html) , –

Смежные вопросы