簡體   English   中英

如何制作類似 Finder 的 Dock 菜單?

[英]How to make a Finder-like Dock menu?

當用戶在正在運行的應用程序上使用鼠標右鍵(或命令按鈕 + 鼠標單擊)單擊 Dock 圖標時 - 他可以看到 Dock 菜單。 它通常由 3 個部分組成:

http://i55.tinypic.com/i1for6.png

此應用程序打開的所有文檔的列表(紅色)、自定義應用程序的菜單部分(黃色)和隱式添加到所有項目的默認項目(藍色)。

蘋果在這里解釋說,我們可以通過實現應用程序委托的方法‑(NSMenu *)applicationDockMenu:(NSApplication *)sender來定義這些自定義項(黃色),該方法應返回有效菜單(或通過在 Interface Builder 中定義此 Dock 菜單)。

如果您嘗試打開 Finder 的停靠菜單,您會看到一個不尋常的菜單:

不尋常的菜單

這是不尋常的,因為它沒有普通的退出項目和“選項”子菜單 - 就像任何其他啟動的應用程序默認情況下一樣。 相反,它只有“隱藏”。

我很確定應用程序或 nib 文件可以覆蓋 Dock 菜單的這個默認“系統”(藍色)部分。 也許有人知道如何實現這一目標?

我正在開發一個不應允許退出或選擇在“登錄”時啟動的安全應用程序,但它應該在用戶登錄時一直運行(就像 Finder 一樣,它可能只使用強制應用程序來停止退出或活動監視器)。 我有充分的理由想要擺脫它。 我知道這不完全是 Mac OS 的方式,但這不完全是一個普通的應用程序。 有沒有人做過類似的事情?

謝謝

Dock 菜單實際上是由 Dock 進程本身建立的,它只是代理每個應用程序的 dockMenus,所以你不能直接對它做任何事情。

可行的是:安裝 Quartz Event Tap,攔截路由到 Dock 進程的點擊,檢查它是否在您自己的應用程序圖標上,然后放置您自己的自定義菜單。 棘手,對於沙盒應用程序來說根本不可能。

這很簡單:在 nib 文件中創建一個菜單,然后將NSApplicationdockMenu出口連接到該菜單。 您可以在此處找到更多信息。

或者您可以通過代碼將菜單項添加到現有菜單。 您可以使用-[NSApplication applicationDockMenu:]來獲取現有的停靠菜單並以編程方式添加項目。

Finder 的菜單很特別,因為 Finder 本身很特別:它不能退出,必須始終保留在 Dock 中,必須在登錄時打開,並且您不能在 Finder 中顯示 Finder 的位置。

你要找的東西根本不存在。 沒有辦法做到這一點。 沒有應用程序可以覆蓋該區域。

您可以將設置為YESLSUIElement鍵添加到應用程序的Info.plist文件中,而不是弄亂停靠菜單嗎? 這將完全阻止您的應用程序出現在 Dock 中。

但是,它也會阻止它具有菜單欄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM