gpt4 book ai didi

macos - 更改激活策略 : from startup

转载 作者:行者123 更新时间:2023-12-03 17:23:27 27 4
gpt4 key购买 nike

我遇到以下问题。我有一个带有 UI、nib 等的 Cocoa 应用程序。我需要能够在后台或前台启动该应用程序。换句话说,我需要前者中的 NSApplicationActivationPolicyProhibited 和后者中的 NSApplicationActivationPolicyRegular 。现在...如何启动的决定取决于传递给应用程序启动的参数。所以代码看起来或多或少像:

   shouldBeBackground = // read this from argument - argv
if (shouldBeBackground) {
[NSApp setActivationPolicy:NSApplicationActivationPolicyProhibited];
} else {
[NSApp setActivationPolicy:NSApplicationActivationPolicyRegular];
[NSApp activateIgnoringOtherApps:YES];
// later on I do the makeKeyAndOrderFront:
}

现在问题出在 Info.plist 上。如果我将 LSBackgroundOnly 设置为 1,一切都会按预期工作。但如果我将其设置为 0(或不设置 key ),当应用程序启动时,它会在扩展坞中显示应用程序的图标几毫秒并闪烁一下。我想这是因为应用程序是使用默认策略初始化的(开始显示图标),而我将其切换到后台太晚了。这也解释于:Cocoa - go to foreground/background programmatically

我知道在哪里读取参数并执行前面的 IF,甚至在我启动 cocoa 或应用程序之前(例如,我可以 Hook MyOwnPrincipalClass +initialize),但即使这样(即使我设置了策略)它看起来Cocoa的启动会设置默认值。所以它不起作用。

我发现的唯一解决方案是将 IF 放在开头(在初始化 cocoa 之前),并根据参数编写/修改 Info.plist (LSBackgroundOnly 标志)。这可能有效,但它是一个真正的黑客。我想找到一个更清洁的解决方案。

顺便说一句,如果我采取相反的方式:始终作为后台启动,然后将其设置为前台,则会产生最糟糕的结果,因为进入前台时,应用程序的菜单栏不会自动显示:您需要切换到另一个应用程序,然后回来让它出现......我在互联网上搜索,确实它看起来像一个已知的错误/限制。

顺便说一句:拥有 2 个不同的二进制文件也不是一个选择。

感谢您给我的任何帮助,

最佳答案

始终在启动时作为后台应用程序启动。然后,如果在启动时您想成为前台应用程序,您可以以编程方式更改 plist 值,然后以编程方式重新启动应用程序(在终止应用程序之前发送 NSTask 来启动应用程序)。在应用程序退出时,确保您处于后台模式。看起来很简单。

关于macos - 更改激活策略 : from startup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14404517/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com