HeyCHのブログ

慢性疲労のへいちゃんです

【C#】タスクトレイに常駐するアプリの作り方(.NET5もOK)

今、ミストトレインガールズ(X指定)っていうゲームをやっていて、基本放置でアイテムや経験値を稼ぐようになっている。
ずーっと放置できれば良いんだけど、毎朝5時にスタート画面に戻されてしまう。
リスタートして再び放置するのはちょっと難しすぎるので、5時ちょい過ぎにPCの電源を落とすアプリを作ることにしました。
ウィンドウをずっと表示していると邪魔なので、タスクトレイに常駐するアプリとすることにしました。

アイコンの作成

タスクトレイに常駐させる場合、NotifyIconというものを使うのですが、自前のアイコンがあったほうが良いよねって事で作ります。
僕の場合、GIMP2をインストールして、32×32で作りました。(マルチサイズのアイコンも作れるっぽいですが面倒(技術が無い)なので1つだけ)

f:id:HeyCH:20210709144642p:plain
PNGなのでICOに変更する必要有り

※ここでは「Shutdowner.ico」という名前で保存したこととする。

アプリ作成

  • Visual Studio を起動
  • 新しいプロジェクトの作成
  • テンプレートでWindowsフォームアプリ(ここでは.NET5用)を選択して「次へ」
  • 適当な名前を付けて「次へ」(ここでは「Shutdowner」とする)
  • ターゲットフレームワーク(ここでは.NET5)を選択して「作成」

作成したアイコンをリソースに入れる

  • プロジェクト(適当に付けた名前)を右クリックして「プロパティ」を表示
  • 「リソース」を選択し、「このプロジェクトには規定のリソースが含まれていません。ファイルを作成するには、ここをクリックしてください。」をクリック
  • この画面に先ほど作ったアイコンをドラッグ&ドロップ

Program.csの編集

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Shutdowner {
    static class Program {
        static NotifyIcon nicon;
        /// <summary>
        ///  The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main() {
            //元からあるコードはコメントアウト
            //Application.SetHighDpiMode(HighDpiMode.SystemAware);
            //Application.EnableVisualStyles();
            //Application.SetCompatibleTextRenderingDefault(false);
            //Application.Run(new Form1());

            nicon = new NotifyIcon();
            nicon.Icon = Shutdowner.Properties.Resources.Shutdowner;
            nicon.Text = "ツールチップに表示されるテキスト";
            nicon.Visible = true;

            Application.Run();
        }
    }
}

ついでにアプリのアイコンも設定しちゃう

  • プロジェクトのプロパティで「アプリケーション」を選択
  • アイコンとマニフェストの「アイコン」から「Resources\Shutdowner.ico」を選択

これでビルドすれば、EXEファイルのアイコンと起動したときにタスクトレイに表示されるアイコンが「Shutdowner.ico」になる
※EXEから起動した場合、今のところ終了する処理がないのでデバッグで実行した方が良い(タスクマネージャーから終了すれば良いけど)