[英]How to make a Finder-like Dock menu?
當用戶在正在運行的應用程序上使用鼠標右鍵(或命令按鈕 + 鼠標單擊)單擊 Dock 圖標時 - 他可以看到 Dock 菜單。 它通常由 3 個部分組成:
此應用程序打開的所有文檔的列表(紅色)、自定義應用程序的菜單部分(黃色)和隱式添加到所有項目的默認項目(藍色)。
蘋果在這里解釋說,我們可以通過實現應用程序委托的方法‑(NSMenu *)applicationDockMenu:(NSApplication *)sender
來定義這些自定義項(黃色),該方法應返回有效菜單(或通過在 Interface Builder 中定義此 Dock 菜單)。
如果您嘗試打開 Finder 的停靠菜單,您會看到一個不尋常的菜單:
這是不尋常的,因為它沒有普通的退出項目和“選項”子菜單 - 就像任何其他啟動的應用程序默認情況下一樣。 相反,它只有“隱藏”。
我很確定應用程序或 nib 文件可以覆蓋 Dock 菜單的這個默認“系統”(藍色)部分。 也許有人知道如何實現這一目標?
我正在開發一個不應允許退出或選擇在“登錄”時啟動的安全應用程序,但它應該在用戶登錄時一直運行(就像 Finder 一樣,它可能只使用強制應用程序來停止退出或活動監視器)。 我有充分的理由想要擺脫它。 我知道這不完全是 Mac OS 的方式,但這不完全是一個普通的應用程序。 有沒有人做過類似的事情?
謝謝
Dock 菜單實際上是由 Dock 進程本身建立的,它只是代理每個應用程序的 dockMenus,所以你不能直接對它做任何事情。
可行的是:安裝 Quartz Event Tap,攔截路由到 Dock 進程的點擊,檢查它是否在您自己的應用程序圖標上,然后放置您自己的自定義菜單。 棘手,對於沙盒應用程序來說根本不可能。
這很簡單:在 nib 文件中創建一個菜單,然后將NSApplication
的dockMenu
出口連接到該菜單。 您可以在此處找到更多信息。
或者您可以通過代碼將菜單項添加到現有菜單。 您可以使用-[NSApplication applicationDockMenu:]
來獲取現有的停靠菜單並以編程方式添加項目。
Finder 的菜單很特別,因為 Finder 本身很特別:它不能退出,必須始終保留在 Dock 中,必須在登錄時打開,並且您不能在 Finder 中顯示 Finder 的位置。
你要找的東西根本不存在。 沒有辦法做到這一點。 沒有應用程序可以覆蓋該區域。
您可以將設置為YES
的LSUIElement
鍵添加到應用程序的Info.plist
文件中,而不是弄亂停靠菜單嗎? 這將完全阻止您的應用程序出現在 Dock 中。
但是,它也會阻止它具有菜單欄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.