C# タスクトレイ常駐型アプリケーションの作成

環境

Windows10 pro 64bit
VisualStudio 2019

手順

新しいプロジェクトを作成する

Windows フォームアプリケーション(.NET Framework) プロジェクトを作成する。

タスクバーに表示されないようにする

フォームのデザイナを開いて「ShowInTaskbar」の値を「False」にする。

tasktray_app_prop_showintaskbar

タスクトレイのアイコンが右クリックされた時のコンテキストメニューを用意する

フォームのデザイナから「ContextMenuStrip」を追加する。

tasktray_app_add_contextmenustrip

追加した ContextMenuStrip に適当なメニューを追加する。
とりあえずフォームの表示、非表示を切り替える「Disp-Hide」と終了させる「Exit」を作る。

tasktray_app_contextmenustrip

それぞれのメニューのクリックイベントを実装する。

private void dispHideToolStripMenuItem_Click(object sender, EventArgs e)
{
    Visible = !Visible; // Formの表示、非表示を切り替える
}

private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
    Application.Exit(); // アプリケーションの終了
}

タスクトレイに表示するアイコンの設定

フォームのデザイナからコモンコントロールの「NotifyIcon」を追加する。

tasktray_app_add_notifyicon

追加した NotifyIcon のプロパティで設定を行う。
ContextMenuStrip には上記で作成したものを設定。Icon,Text は任意に設定する。
Textに設定した文字列はポップアップとして表示される。

tasktray_app_prop_notifyicon

フォームのコントロールボックスを無効化しておく

フォームのデザイナで「ControlBox」の値を「False」タスクトレイのメニュー以外から閉じたりなどの操作をさせないようにする。

tasktray_app_form_ctrlbox

起動時にフォームを表示しないで実行されるようにする

Program.cs を次のように変更する

static class Program
{
    /// <summary>
    /// アプリケーションのメイン エントリ ポイントです。
    /// </summary>
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
#if false
        Application.Run(new Form1());
#else
        // Formを表示しないで実行開始
        using(new Form1())
        {
            Application.Run();
        }
#endif
    }
}

その他

タスクトレイアイコンがクリックされた場合になにかしたい場合は NotifyIcon の MouseClick イベントなどを実装する。

tasktray_app_event_notifyicon
private void notifyIcon1_MouseClick(object sender, MouseEventArgs e)
{
    if(e.Button == MouseButtons.Left)
    {
        // 左クリックされた時の処理

    }
}