繁体   English   中英

Mac - 如何以编程方式隐藏NSApplicationActivationPolicyAccessory或LSUIElement应用程序?

[英]Mac - How to programmatically hide NSApplicationActivationPolicyAccessory or LSUIElement application?

我正在编写一个基于Swift的小型Cocoa应用程序。 它是一个单一的窗口应用程序,类似Spotlight / QuickSilver / Alfred。 它被设置为NSApplicationActivationPolicyAccessorydocs )(虽然我尝试使用LSUIElement做同样的事情,这是等效的)。 它通过全局热键激活。

一切都运行良好,除了当它处于活动状态时我无法使用NSRunningApplication.currentApplication().hide()应用程序NSRunningApplication.currentApplication().hide()

hide方法的文档说:“如果应用程序已经退出,或者某个类型无法隐藏,则该值的属性为NO 。” (强调我的),我得到了一个NO (虽然我实际上使用的是Swift,所以我变得false )。

我可以理解为什么NSApplicationActivationPolicyProhibited应用程序无法隐藏,因为它永远不会被激活,但令我感到困惑的是NSApplicationActivationPolicyAccessory也是如此。

我试过myWindow.orderOut(self); ,但这只是隐藏窗口而不隐藏我的应用程序并将焦点返回到以前的应用程序。

我存储了对以前活动的应用程序的引用,所以如果需要,我可以再次手动激活该应用程序,但我希望有一个更简洁的方法来执行此操作。

使用NSApplication.sharedApplication().hide(nil) 通常会解决应用程序对象( NSApplication的实例)而不是NSRunningApplication的实例来操作当前的应用程序。

手动解决方案是存储对先前活动的NSRunningApplication实例的引用(下面称为previouslyActiveApplication ),然后在您要停用NSApplicationActivationPolicyAccessory应用程序时激活它,如下所示:

previouslyActiveApplication!.activateWithOptions(NSApplicationActivationOptions.ActivateIgnoringOtherApps);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM