簡體   English   中英

僅在Mac上使用C#/ Mono的系統托盤(無停靠圖標)應用程序

[英]System Tray only (no dock icon) application using C# / Mono on Mac

我希望將我的一個C#應用程序移到Mono上,以便在Mac上使用。 目前,我正在試圖弄清楚如何使它成為一種“背景”過程,但仍然具有GUI元素的能力(我相信這排除了mono-service )。

最終目標是:

  1. 對於大多數交互,按時鍾放置托盤圖標。
  2. 刪除通常隨啟動的應用程序一起提供的停靠欄圖標
  3. 讓應用程序在啟動時運行。

簡而言之,只需考慮Dropbox應用程序的工作原理。 我想要那種類型的GUI,但使用Mono / Mac應用程序。

我相信這通常是通過在應用程序包的Info.plist中設置LSUIElement = 1來實現的。 但是,我沒有運氣。 我認為這可能與mono命令在app bundle中啟動我的應用程序有關。 一旦應用程序啟動mono我假設它不會級聯到進一步的應用程序啟動。 不過,這是一個純粹的猜測。

有沒有人對此有任何想法? 謝謝。

我有你的答案:

首先,添加狀態欄圖標(Win Forms中的Notify Icon替代):

        NSStatusItem sItem = NSStatusBar.SystemStatusBar.CreateStatusItem(30);
        sItem.Menu = notifyMenu;
        sItem.Image = NSImage.FromStream(System.IO.File.OpenRead(NSBundle.MainBundle.ResourcePath + @"/notify-icon.icns"));
        sItem.HighlightMode = true;

notifyMenu是您的NSMenu實例,作為通知圖標的上下文菜單條的一種方式。

並將使用Icon Composer制作的ICNS文件放在項目文件中,並將其標記為內容。 (右擊 - >構建動作 - >內容)

現在是時候刪除停靠圖標:

在您的info.plist文件中。 創建一個新的布爾類型項並將其命名為“ LSUIElement ”並將值設置為YES

希望能幫助到你。 此致,Peyman Mortazavi

我不知道我是否理解你的問題。 如果你只需要一個沒有任何主窗口概念的應用程序,但是使用系統托盤,我曾經使用WinForms這樣的代碼來完成它

static void Main()
{
    Application.Run(new MyContext());
}

其中MyContext是一個派生自ApplicationContext的類,它在構造函數中使用NotifyIcon類創建了一個托盤圖標。 事實上, Application.Run()為您的應用程序啟動消息循環,讓托盤圖標有機會回答用戶點擊(托盤圖標本身可以在之前創建)。 它適用於Windows和Ubuntu,從未在Mac上進行過測試。

不過今天我會在Linux上使用Gtk#,在Mac上使用MonoMac。 在第一種情況下概念可能非常相似(你也可以看到Tomboy代碼,它就是這樣!)。 在第二 - 不知道,從未使用過它。

暫無
暫無

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

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