如何以编程方式启动OS X应用程序并将其最小化?

7

我需要在启动时启动我的应用程序,但我希望它处于“最小化”状态,也就是说,它将在 dock 中打开,但其窗口不会显示。

就像 TeamViewer 一样,如果您了解这个应用程序。

我目前使用 launchctl 和我已添加到 ~Library\LaunchAgents 的 plist,在启动时确实会启动应用程序,并显示其窗口。

如何以这种隐藏/最小化的状态启动它?


OP不想启动应用程序,他希望他的应用程序在最小化的状态下加载。 - Daij-Djan
在OS X中没有“最小化应用程序”的概念。不过,有最小化的窗口。 - Nikolai Ruhe
3个回答

6

在主应用程序窗口的xib中取消勾选“启动时可见”。

enter image description here

在您的应用程序委托类中实现- (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication hasVisibleWindows:(BOOL)flag方法。

- (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication hasVisibleWindows:(BOOL)flag
{
    if (!flag) {
        [window makeKeyAndOrderFront:self];
        return YES;
    }
    return NO;
}

谢谢@Parag!不过,我想要以最小化的方式启动我的应用程序,这样当用户点击Dock中的图标时它就会打开。如果我将其隐藏起来,用户就无法打开它。还有其他的想法吗? - Nili
很遗憾,它不起作用...这个应用程序是隐藏的,每当我点击Dock图标时,什么都不会发生... - Nili
一如既往,@Parag 出手相助!谢谢!在实现 applicationShouldHandleReopen 后,它像魔法一样奏效了。 - Nili

0
以下代码行将帮助您实现:
[[self window] miniaturize:self];

3
没有...可以正常启动并将窗口最小化的选项。 - Daij-Djan

0

最小化...我想你想要将它作为隐藏启动

请参考NSWorkspace的:

- (BOOL)launchAppWithBundleIdentifier:(NSString *)bundleIdentifier options:(NSWorkspaceLaunchOptions)options additionalEventParamDescriptor:(NSAppleEventDescriptor *)descriptor launchIdentifier:(NSNumber **)identifier

使用该方法从另一个应用程序启动应用程序,并传递选项NSWorkspaceLaunchAndHide


如果你想知道如何让应用程序不显示 Dock 图标:
在你的 plist 文件中定义 LSUIElement = YES

我该如何使用launchAppWithBundleIdentifier?目前我在launchctl中打开应用程序,它会自动加载我的MainMenu.xib... - Nili
那么你不想以编程方式启动应用程序 ;) - Daij-Djan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接