Как создать пункт меню, который запустит приложение? - PullRequest
1 голос
/ 24 марта 2012

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

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

У меня есть настройка Xcode, но я не совсем уверен, с чего мне начать.Все, что я нашел, - это как добавлять и удалять существующие меню, уже находящиеся в папке «Дополнительная информация меню».

Любые советы, подсказки, учебные пособия или полезный код!запустить AppleScript из маленького элемента строки меню Script ... Я хочу отдельный элемент строки меню, который запустит приложение.

РЕДАКТИРОВАТЬ: я говорю о строке меню в правом верхнем углу, а не оДок.

РЕДАКТИРОВАТЬ: я хочу иметь возможность создать ярлык или кнопку быстрого запуска для приложения, так что одним нажатием на значок в строке меню запустит приложение.Я не хочу или не нуждаюсь в каких-либо выпадающих меню, связанных с элементом строки меню ... один щелчок = запуск приложения.

Ответы [ 2 ]

1 голос
/ 24 марта 2012

Пошаговая инструкция:

  1. Установите Application is agent (UIElement) в YES в вашем info.plist файле
  2. Получите UKLoginItemRegistry с сайта Ули Кустерера, если вы хотите, чтобы меню отображалось при входе в систему ( необязательно; , но вы, скорее всего, захотите это сделать)
  3. Внедрите NSMenu (с необходимыми элементами) в XIB и подключите его в качестве выхода (statusMenu) к основному делегату приложения
  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];
}

И ... это все! : -)

1 голос
/ 24 марта 2012

Вы ищете элемент состояния - см. Темы программирования строки состояния . Более старый (Xcode 3, но не так уж много) учебник можно найти здесь .

...