Próbuję utworzyć aplikację, która będzie miała tylko ikonę w zasobniku i nie pojawi się na pasku zadań. (podobnie jak w Dropbox) Potrzebuję utworzyć zarówno wersję Windowsa jak i Maca aplikacji, więc spróbowałem użyć MonoMaca do stworzenia Macintosha.Jak utworzyć aplikację C# z ikoną zasobnika w MonoMac (bez ikony dokowania)?
Jaki jest najlepszy sposób utworzenia aplikacji obsługującej tylko taca w MonoMac?
Wszystkie zasoby znalazłem powiedzieć zrobić jedną z dwóch rzeczy:
- Dodaj
<key>LSUIElement</key><string>1</string>
do plikuInfo.plist
. - Dodaj następujący kod do zdarzenia
FinishedLaunching
w klasieAppDelegate
:NSApplication.SharedApplication.ActivationPolicy = NSApplicationActivationPolicy.Accessory;
Próbowałem wszystkich kombinacji tych dwóch, ale wydaje się, że tak szybko, jak próbuję instancji C# System.Timers.Timer
, ikona ponownie pojawia się w doku na dole ekranu. Czy brakuje mi czegoś o tym, jak OSX obsługuje aplikacje działające w tle?
Co robię źle? Czy istnieje lepszy sposób tworzenia aplikacji w tle, która ma ikonę górnego zasobnika, ale nie ma ikony dolnej stacji dokującej w systemie OSX?
(To jest bardzo podobne do tego SO question, ale to pytanie było od kilku lat temu i nigdy nie został w pełni odpowiedział, więc mam nadzieję, że może być pełniejsza odpowiedź tam.)
Oto kod mam tak daleko:
public partial class AppDelegate : NSApplicationDelegate
{
MyServiceObject currentServiceObject;
public AppDelegate() { }
public override void FinishedLaunching (NSObject notification)
{
// Construct menu that will be displayed when tray icon is clicked
var notifyMenu = new NSMenu();
var exitMenuItem = new NSMenuItem("Quit My Application",
(a,b) => { System.Environment.Exit(0); }); // Just add 'Quit' command
notifyMenu.AddItem(exitMenuItem);
// Display tray icon in upper-right-hand corner of the screen
var 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;
// Remove the system tray icon from upper-right hand corner of the screen
// (works without adjusting the LSUIElement setting in Info.plist)
NSApplication.SharedApplication.ActivationPolicy =
NSApplicationActivationPolicy.Accessory;
// Start running the program -- If I comment out then no dock icon appears
currentServiceObject = new MyServiceObject();
}
}
miłość znać odpowiedź do tego również! – berg