如何创建将启动应用程序的菜单栏项目?
好的,我用AppleScript创建了一个小工具,并使用Automator将它变成一个应用程序(MyApp.app)。我想创建一个菜单栏项目(menulet,菜单额外),只需点击它就可以启动MyApp.app。如何创建将启动应用程序的菜单栏项目?
我知道我需要创建一些在/ System/Library/CoreServices/Menu Extras文件夹中的某种.menu文件。
我有Xcode设置,但不是真的知道我需要从哪里开始。我所有的Google搜索都已经显示如何添加和删除Menu Extras文件夹中已有的菜单。
任何提示,技巧,教程或代码赞赏!
编辑:我不想从小脚本菜单栏项目运行AppleScript ...我想要一个单独的菜单栏项目,将启动应用程序。
编辑:我在说右上角的菜单栏,而不是码头。
编辑:我想能够创建一个快捷方式或快速启动按钮到应用程序,以便一个点击菜单栏中的图标将启动该应用程序。我不想或不需要任何与菜单栏项目相关的下拉菜单... one-click =启动应用程序。
步骤一步:
- 设置
Application is agent (UIElement)
到YES
你在info.plist
文件 - 从乌里Kusterer的网站获取UKLoginItemRegistry,如果你想在菜单在登录显示出来(可选;但这是你最有可能想要做的方式)
- 在你的XIB中实现一个NSMenu(带有你需要的项目),并将它作为插座连接(
statusMenu
),以你的主要应用代表 - 在
AppDelegate.m
文件设置Status Bar Menu
,就像这样:
- (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];
}
而且......就是这样! :-)
好吧,比我希望的复杂一点...我在哪里设置我想要运行的应用程序名称,当我点击菜单栏中的图标? – jsherk 2012-03-24 15:25:18
@jsherk Ooops,我实际上并没有明白你的意思。您不会在任何地方设置任何应用程序名称......上面的代码所做的就是在状态栏中设置菜单......就这些了。菜单项所做的操作将通过与平常连接的任何操作(通过Interface Builder)进行定义.. ;-) – 2012-03-24 15:36:55
请勿使用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) 。 – 2012-03-24 17:15:50
我假设你的意思是你想以编程方式做这件事? – Bill 2012-03-24 04:40:41
@Bill如果你的意思是写一个程序来做到这一点,那么是的。但你会怎么做呢? – jsherk 2012-03-24 04:53:14
你只需将它拖到那里。我假设你在谈论码头?如果没有,那么对这个误解抱歉。 – Bill 2012-03-24 04:58:30