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

标签 c# macos mono background system-tray

我希望将我的一个 C# 应用程序转移到 Mono 以便在 Mac 上使用。目前,我正在尝试弄清楚如何使它成为一种“后台”进程,但仍然具有 GUI 元素的能力(我相信这排除了 mono-service)。

最终目标是这样的:

  1. 在大多数交互中按时钟放置一个托盘图标。
  2. 删除启动的应用程序通常附带的停靠栏图标
  3. 让应用程序在启动时运行。

简而言之,想想Dropbox应用程序工作。我想要那种类型的 GUI,但带有 Mono/Mac 应用程序。

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

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

最佳答案

我有你的答案:

首先,添加一个状态栏图标(替代 Win Forms 中的通知图标):

        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 文件放入您的项目文件中,并将其标记为内容。 (右击->构建 Action ->内容)

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

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

希望对您有所帮助。 问候, 佩曼莫塔扎维

关于c# - 在 Mac 上使用 C#/Mono 的仅系统托盘(无停靠图标)应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4414629/

相关文章:

c# - 示例 Blazor 项目中计数器的状态是否可以在页面切换之间保留?

c# - 如何声明多个计时器并在时间到期时停止计时器

c# - Web API 中的最佳/安全字符串长度

macos - Applescript:无需打开即可获取.app的路径

linux - 使用 net.tcp 绑定(bind)时 MONO 返回连接被拒绝

c# - MonoTouch 的性能问题?

c# - 无法在 CollectionChanged 事件期间更改 ObservableCollection

string - 如何从 Mac 中的二进制文件中提取硬编码字符串?

macos - NSScrollView 并在滚动时手动设置内容偏移量

.net - 如何在 Mono 中获取串口的 "friendly"名称并保持跨平台