タスクトレイにアプリを置く方法
参考サイト#1をベースに作成(ほぼそのまま)。
アイコンを準備する必要があるので、それ用のソフトを持っていない・フリーソフトを入れたくない場合は、手前味噌ですが下記あたりで適当に対応ください。
- https://qiita.com/kob58im/items/850da88ebed27c05022a
- https://qiita.com/kob58im/items/6f319988e3cdb745cf88
- https://qiita.com/kob58im/items/1d3420b51ff6cb5c3871
サンプルコード
usingSystem;usingSystem.Drawing;usingSystem.Windows.Forms;classTaskTrayTest:Form{TaskTrayTest(){this.ShowInTaskbar=false;NotifyIconicon=newNotifyIcon();icon.Icon=newIcon("Output.ico");// Note: この行を省略するとタスクトレイにアイコンが表示されない。icon.Visible=true;icon.Text="常駐テスト";varmenu=newContextMenuStrip();varmenuItem=newToolStripMenuItem();menuItem.Text="E&xit";menuItem.Click+=(sender,e)=>{Application.Exit();};menu.Items.Add(menuItem);icon.ContextMenuStrip=menu;}[STAThread]staticvoidMain(string[]args){Console.WriteLine("Entring Main().");newTaskTrayTest();Console.WriteLine("Instance is created.");Application.Run();Console.WriteLine("Exit Main().");}}
正直、原理がよくわからない
■分かっていること
- NotifyIcon
が、タスクトレイにアイコンを表示させるためのクラス。(Microsoft Docs参照1)
- Application.Run()
が、メッセージループを回している。(Microsoft Docs参照)
■気を付けるべきこと
- タスクトレイからFormを表示させたりする場合は、アプリの終了のさせ方に気を付ける必要がありそう。参考サイト3参照。
■よくわからないこと(未確認)
- NotifyIcon
のやっていること。(ILSpyでみてみようとしたが難しそう)
- Application.Run
で回しているメッセージループのメッセージは誰が受け取っているのか?誰も受け取っていない?
- タスクトレイに置くだけなら、Form
要らんかも。
参考サイト
- C#: タスクトレイに常駐するアプリの作り方
- フォームを表示させずにトレイアイコンを表示する - dobon.net
- アプリケーション(自分自身)を終了させる - dobon.net
- 通知領域のアイコン情報のレジストリについて
スタートアップへの登録
参考サイト
まだ試せていない
[C#] スタートアップメニューにショートカットを登録する方法
日本語版は機械翻訳が酷かったので英語のほうにしてます。 ↩