Приложение только в системном трее (без значка док-станции) с использованием C # / Mono на Mac - PullRequest
15 голосов
/ 11 декабря 2010

Я хочу переместить одно из моих приложений на C # в Mono для использования на Mac.В настоящее время я пытаюсь выяснить, как сделать его своего рода «фоновым» процессом, но все еще обладаю способностью иметь элементы графического интерфейса (я считаю, что это исключает mono-service).

Конечная цельэто:

  1. Для большинства взаимодействий поместите значок в трее на часы.
  2. Удалите значок док-станции, который обычно поставляется с запущенным приложением
  3. Запустите приложение при запуске.

Короче, просто подумайте, как работает приложение Dropbox .Мне нужен графический интерфейс такого типа, но с приложением Mono / Mac.

Я полагаю, что это обычно достигается установкой LSUIElement = 1 в Info.plist пакета приложения.Однако мне не повезло с этим.Я думаю, что это может быть связано с командой mono, запускающей мое приложение из пакета приложений.Как только приложение запускается mono, я предполагаю, что оно не будет каскадно к дальнейшему запуску приложения.Впрочем, это чистое предположение.

У кого-нибудь есть идеи по этому поводу?Спасибо.

Ответы [ 2 ]

9 голосов
/ 20 апреля 2012

У меня есть ваш ответ:

Сначала добавьте значок строки состояния (альтернатива значку уведомления в 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 в качестве средства контекстного меню для иконки уведомлений.

и поместите файл ICNS , созданный с помощью Icon Composer , в файлы проекта и отметьте его какСодержание.(щелкните правой кнопкой мыши -> создать действие -> содержимое)

Теперь пришло время удалить значок док-станции:

в файле info.plist.создайте новый элемент типа Boolean и назовите его " LSUIElement " и установите значение YES .

Надеюсь, это поможет.С уважением, Пейман Мортазави

0 голосов
/ 04 июля 2011

Я не знаю, правильно ли я понимаю ваш вопрос. Если вам просто нужно приложение без какого-либо понятия о главном окне, но с системным треем, я однажды сделал это с WinForms, используя код вроде

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

Где MyContext был классом, производным от ApplicationContext, который в своем конструкторе создал иконку в трее, используя класс NotifyIcon. Фактически Application.Run() запускает цикл сообщений для вашего приложения, давая иконке в трее возможность отвечать на щелчки пользователей (сам значок в трее мог быть создан ранее). Он работал на Windows и Ubuntu, никогда не тестировался на Mac.

Тем не менее сегодня я бы использовал Gtk # в Linux и MonoMac в Mac. В первом случае концепция, вероятно, очень похожа (вы также можете увидеть код Tomboy, он делает именно это!). Во втором - не знаю, никогда не использовал его.

...