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

时间:2015-06-18 18:42:02

标签: macos cocoa

我正在编写一个基于Swift的小型Cocoa应用程序。它是一个单一的窗口应用程序,类似Spotlight / QuickSilver / Alfred。它被设置为class My_Window: self.get_info_box = Entry(root) self.entry_button = Button(root, text="Choose", command =lambda: self.retrieve_input(self.get_info_box, solitaire.cards)) def retrieve_input(self, box, entity): self.user_input = box.get() entity = input_check(box) def input_check(which_box): # Function outside class my_window.which_box.delete(0, "end") # This is want I would like to do if it worked return 0 my_window = My_Window() docs)(尽管我使用NSApplicationActivationPolicyAccessory尝试了同样的事情,这是等效的)。它通过全局热键激活。

一切都很好,除了当它处于活动状态时我无法使用LSUIElement隐藏应用程序。

hide方法的

The docs说“如果应用程序已经退出,则此值的属性为NSRunningApplication.currentApplication().hide(),或者如果某个类型无法隐藏,则该属性为 “。 (强调我的),我得到NO回来(虽然我实际上使用的是Swift,所以我得到了NO)。

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

我尝试了NSApplicationActivationPolicyAccessory,但这只是隐藏了窗口而没有隐藏我的应用程序并将焦点恢复到之前的应用程序。

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

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:0)

手动解决方案是存储对先前处于活动状态的NSRunningApplication实例(下面称为previouslyActiveApplication)的引用,然后在您要停用NSApplicationActivationPolicyAccessory应用程序时激活它,就像这样:

previouslyActiveApplication!.activateWithOptions(NSApplicationActivationOptions.ActivateIgnoringOtherApps);