プログラミング素人のはてなブログ

プログラミングも電気回路も専門外の技術屋の末端が勉強したことや作品をアウトプットするブログ。コードに間違いなど見つけられたら、気軽にコメントください。 C#、python3、ラズパイなど。

C#でタスクトレイ常駐型のアプリを作る

C#Windowsアプリを作るときに、UIが不要でタスクトレイ常駐タイプのアプリを作りたいときがあります。
以前作ったタイムカードなどもそうです。
s51517765.hatenadiary.jp

ここでは、タスクトレイ常駐タイプのアプリの設定の仕方を説明します。

工程(じゃ~~ん 以下略)

プロジェクトを作成します。
f:id:s51517765:20191025095723j:plain

WindowStateをMinimizedにします。これで最小化起動になります。
f:id:s51517765:20191025095823j:plain

ShowInTaskbarをFalseにします。
f:id:s51517765:20191025095857j:plain

アイコンを設定します。
f:id:s51517765:20191025095919j:plain

NotifyIconも設定します。こちらがタスクトレイに表示されるアイコンで、通常のFormのアイコンとは独立に設定できます。あまり違うように設定するメリットはないような気がしますが。
f:id:s51517765:20191025095939j:plain

これで、最小化(UIが非表示)でタスクトレイのみで起動します。
f:id:s51517765:20191025100011j:plain

しかしこれでは、このソフトウェアは何も操作できない(ログを収集して書き出すなどならこれでもOKですが)ので、タスクトレイのアイコンを右クリックでUIを起動できるようにします。
ツールボックスからコンテキストメニューを追加します。
f:id:s51517765:20191025100055j:plain

ここでは、Form openVersion info.というメニューを作ります。
上記の2つの間には、区切り線を入れます。区切り線は-(半角ハイフン)で入力できます。
f:id:s51517765:20191025100117j:plain

デザイナー画面の下のほうにでているcontextMenuStripをクリックし、デザイナーに表示されたコンテキストメニュの項目をダブルクリックするとそのメニューを選んだ時に実行される関数が作成されます。
f:id:s51517765:20191025100135j:plain

フォームを通常サイズに表示するようにします。

private void openFormToolStripMenuItem_Click(object sender, EventArgs e)
{
   this.WindowState = FormWindowState.Normal;
}

Version infoを表示するようにします。

private void versionInfoToolStripMenuItem_Click(object sender, EventArgs e)
{
    MessageBox.Show("Copyright 2019" + System.Environment.NewLine +
                   "s51517765" + System.Environment.NewLine +
                   "http://s51517765.hatenadiary.jp/");
        }

notifiIconのプロパティでContextMenuStripで呼び出すContextMenuを指定します。

これで、タスクトレイからFormを呼び出すことが出来ます。