【问题标题】:How to programmatically launch an OS X app in minimized mode?如何以最小化模式以编程方式启动 OS X 应用程序?
【发布时间】:2013-08-27 10:48:39
【问题描述】:

我需要在启动时启动我的应用程序,但我希望它被“最小化”,这意味着它将在 Dock 中打开但它的窗口不会显示。

如果您知道此应用程序,则与 TeamViewer 相同。

我目前将launchctl 与我添加到~Library\LaunchAgents 的plist 一起使用,并且确实在启动时启动了应用程序,并显示了它的窗口。

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

【问题讨论】:

  • OP 不想启动应用程序,他希望最小化加载他的应用程序。
  • 在 OS X 中没有“最小化应用程序”的概念。不过,有最小化的窗口。

标签: objective-c xcode macos cocoa


【解决方案1】:

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

在您的应用委托类中实现- (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 中的图标时,它就会打开。如果我以隐藏方式打开它,用户将无法打开它。还有其他想法吗?
  • 不幸的是它没有...该应用程序被隐藏了,每当我单击 Dock 图标时什么都没有发生...
  • 一如既往的@Parag 来救援!谢谢!实施 applicationShouldHandleReopen 后,工作就像一个魅力。
【解决方案2】:

下面这行将帮助你实现

[[自我窗口] miniaturize:self];

【讨论】:

  • no... 会正常启动然后最小化窗口
【解决方案3】:

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

参见 NSWorkspace 的:

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

使用它从另一个应用程序启动一个应用程序并传递选项NSWorkspaceLaunchAndHide


如果您想知道如何让应用不显示停靠图标:

在您的 plist 中定义 LSUIElement = YES

【讨论】:

  • 如何使用launchAppWithBundleIdentifier?我目前在launchctl中打开应用程序,它会自动加载我的MainMenu.xib ...
  • 那么您不想以编程方式启动应用程序;)
猜你喜欢
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 2011-09-25
  • 1970-01-01
  • 2011-06-23
  • 1970-01-01
  • 2015-07-21
相关资源
最近更新 更多