2010-12-11 6 views
14

Szukam przenieść jedną z moich aplikacji C# do Mono do użytku na komputerze Mac. Obecnie staram się wymyślić, jak sprawić, by był to rodzaj procesu "tła", ale nadal ma możliwość posiadania elementów GUI (uważam, że to wyklucza mono-service).Aplikacja tylko w tacce systemowej (bez ikony doki) przy użyciu C#/Mono na Macu

Ostatecznym celem jest to:

  1. Umieść ikonę w zasobniku przez całą dobę dla większości interakcji.
  2. Usuń ikonę dokowania, która zwykle jest dołączona do uruchomionej aplikacji.
  3. Czy aplikacja działa podczas uruchamiania.

Krótko mówiąc, pomyśl tylko, jak działa aplikacja Dropbox. Chcę tego typu GUI, ale z aplikacją Mono/Mac.

Uważam, że jest to zwykle realizowane przez ustawienie LSUIElement = 1 w pliku Info.plist pakietu aplikacji. Jednak nie miałem z tym szczęścia. Myślę, że może to mieć coś wspólnego z poleceniem mono uruchamiającym moją aplikację z pakietu aplikacji. Gdy aplikacja uruchomi się mono, zakładam, że nie kaskada się uruchamia kolejne aplikacje. To jednak czysty domysł.

Czy ktoś ma jakieś pomysły na ten temat? Dzięki.

+0

Możesz odnieść większy sukces, jeśli wspomniałeś o używanym zestawie narzędzi. –

+0

Próbowałem użyć GTK #. Nie sądzę jednak, żeby było to możliwe. – jocull

+1

Zamiast tego możesz zajrzeć do MonoMac. Będziesz mieć więcej dostępnych natywnych Mac OS X, niż w GTK #. – Nate

Odpowiedz

9

mam odpowiedź:

pierwsze, aby dodać ikona na pasku statusu (alternatywa Informuj Ikona w Windows 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 to instancja NSMenu jako środek pasek menu kontekstowego dla ikony powiadomienia.

i umieścić ICNS plik wykonane przy użyciu Ikona Composer w plikach projektowych i flagi go jako zawartość. (Prawy click> budować promocyjny-> treść)

Teraz nadszedł czas, aby usunąć ikonę dokowania:

na pliku Info.plist.Zrób nowy typ i wpisz go "LSUIElement" i ustaw wartość na TAK.

Mam nadzieję, że to pomaga. Pozdrawiam, Peyman Mortazavi

+0

Jeśli ktokolwiek może to potwierdzić, zaznaczę to jako najlepszą odpowiedź (nie mam już zainstalowanych narzędzi) – jocull

+0

Potwierdzam, że działa na Yosemite z Xamarin Studio 5.8.2 –

0

Nie wiem, czy dobrze rozumiem twoje pytanie. Jeśli wystarczy aplikację bez żadnego pojęcia głównego okna, ale z zasobnika systemowego, kiedyś zrobił to z WinForms użyciu kodu jak

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

Gdzie MyContext została klasa pochodzącego z ApplicationContext które w jego konstruktor stworzył ikonę w zasobniku przy użyciu klasy NotifyIcon. W rzeczywistości Application.Run() uruchamia pętlę wiadomości dla twojej aplikacji, dając tacce ikonę szansę odpowiedzieć na kliknięcia użytkownika (sama ikona tacy mogła zostać wcześniej utworzona). Działa na Windows i Ubuntu, nigdy nie testowany na Macu.

Mimo to dzisiaj użyłbym Gtk # na Linux i MonoMac na Macu. W pierwszym przypadku koncepcja jest prawdopodobnie bardzo podobna (można również zobaczyć kod Tomboy, robi to dokładnie!). W drugim - nie wiem, nigdy go nie użyłem.

Powiązane problemy