簡體   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