トレイ アイコンのみを持ち、タスクバーには表示されないアプリケーションを作成しようとしています。(Dropbox と同様) Windows 版と Mac 版の両方のアプリケーションを作成する必要があるため、MonoMac を使用して Mac フロントエンドを作成してみました。
MonoMac でトレイのみのアプリケーションを作成する最良の方法は何ですか?
私が見つけたすべてのリソースは、次の2つのいずれかを行うと言っています。
- ファイルに追加
<key>LSUIElement</key><string>1</string>
しInfo.plist
ます。 - クラスの
FinishedLaunching
イベントに次のコードを追加します。AppDelegate
NSApplication.SharedApplication.ActivationPolicy = NSApplicationActivationPolicy.Accessory;
これら 2 つのすべての組み合わせを試しましたが、 C# をインスタンス化しようとするとすぐにSystem.Timers.Timer
、アイコンが画面下部のドックに再表示されるようです。OSX がバックグラウンド アプリケーションを処理する方法について何か不足していますか?
私は何を間違っていますか?OSX で上部のトレイ アイコンがあり、下部のドック アイコンがないバックグラウンド アプリケーションを作成するより良い方法はありますか?
(これはこのSO questionと非常によく似ていますが、その質問は数年前のものであり、完全には回答されていないため、より完全な回答があることを願っています。)
これまでのコードは次のとおりです。
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();
}
}