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


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

我希望将我的一个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代码,它就是这样!)。 在第二个 – 不知道,从未使用过它。

上述就是C#学习教程:仅在Mac上使用C#/ Mono的系统托盘(无停靠图标)应用程序分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1023332.html

(0)
上一篇 2022年1月7日
下一篇 2022年1月7日

精彩推荐