仅在Mac上使用C#/ Mono的系统托盘(无停靠图标)应用程序

joc*_*ull 15 c# macos mono background system-tray

我希望将我的一个C#应用程序移到Mono上,以便在Mac上使用.目前,我正在试图弄清楚如何使它成为一种"背景"过程,但仍然具有GUI元素的能力(我相信这个规则mono-service).

最终目标是:

  1. 对于大多数交互,按时钟放置托盘图标.
  2. 删除通常随启动的应用程序一起提供的停靠栏图标
  3. 让应用程序在启动时运行.

简而言之,只需考虑Dropbox应用程序的工作原理.我想要那种类型的GUI,但使用Mono/Mac应用程序.

我相信这通常是通过LSUIElement = 1在应用程序包的Info.plist中设置来完成的.但是,我没有运气.我认为它可能与mono从应用程序包中启动我的应用程序的命令有关.一旦应用程序启动,mono我假设它不会级联到进一步的应用程序启动.不过,这是一个纯粹的猜测.

有没有人对此有任何想法?谢谢.

Pey*_*man 9

我有你的答案:

首先,添加状态栏图标(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;
Run Code Online (Sandbox Code Playgroud)

notifyMenu是您的NSMenu实例,作为通知图标的上下文菜单条的一种方式.

并将使用Icon Composer制作的ICNS文件放在项目文件中,并将其标记为内容.(右击 - >构建动作 - >内容)

现在是时候删除停靠图标:

在您的info.plist文件中.创建一个新的布尔类型项并将其命名为" LSUIElement "并将值设置为YES.

希望能帮助到你.此致,Peyman Mortazavi