ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

VisualC#で常駐ソフトを作る方法

私がVisualC#を使って常駐ソフトを作った方法のまとめ。
使用したソフトはMicrosoft Visual C# 2005 Express Editon。

1.新しいプロジェクトの作成

通常のアプリケーションを作るときと同じように、メニューの「ファイル」から「新しいプロジェクト」を選び、Windowsアプリケーションを選択してプロジェクトを作成。

2.ウィンドウを表示しないようにする

起動直後からウィンドウを表示しないようにするために、フォームのWindowStateプロパティをMinimizedに設定。またタスクバーにも表示しないようにするため、ShotInTaskbarプロパティをfalseに設定。Visibleプロパティもfalseに。

this.WindowState = FormWindowState.Minimized;
this.ShowInTaskbar = false;
this.Visible = false;

3.タスクトレイにアイコンを表示

タスクトレイにアイコンを表示するために、フォームにツールボックスからnotifyIconを貼り付ける。notifyIconのIconプロパティに表示したいアイコンファイルを設定。

4.タスクトレイのアイコンを右クリックしたときのメニューを追加

タスクトレイのアイコンを右クリックしたときのメニューを追加するために、フォームにツールボックスからContextMenuStripを追加。これにメニュー項目を追加する。そしてnotifyIconのContextMenuStripプロパティに追加したContextMenuStripの名前を設定。
たとえば、終了メニューを追加するときは、メニュー項目に「終了」を追加。クリックされた時のコードは次のような感じ。

private void 終了ToolStripMenuItem_Click(object sender, EventArgs e)
{
    notifyIcon1.Visible = false;
    Application.Exit();
}

5.タスクトレイのアイコンをダブルクリックするとウィンドウを表示

タスクトレイのアイコンをダブルクリックしたときにウィンドウを表示するようにするため、notifyIconのMouseDoubleClickイベントにコードを追加。

private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
{
    this.Visible = true;
    if (this.WindowState == FormWindowState.Minimized)
        this.WindowState = FormWindowState.Normal;
    this.Activate();
}

6.ウィンドウを閉じても終了しないようにする

ウィンドウの右上の×ボタンを押してもウィンドウが閉じるだけで終了しないようにするために、FormClosingイベントでウィンドウが閉じられるのをキャンセルする。そしてフォームはVisibleをfalseにして最小化。

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    if (e.CloseReason == CloseReason.UserClosing)
    {
        e.Cancel = true;
        this.Visible = false;
        this.WindowState = FormWindowState.Minimized;
    }
}

7.常駐して行う動作をタイマーで設定

フォームにツールボックスからTimerを貼り付ける。Enabledプロパティをtrueに設定し、呼び出したい間隔をIntervalプロパティで設定。Tickイベントにコードを追加する。

private void timer1_Tick(object sender, EventArgs e)
{
    // 常駐して行う動作
}

8.注意事項

終了するときにはnotifyIconのVisibleプロパティをfalseにしておくこと。忘れるとアプリケーションは終了したのに、タスクトレイにアイコンだけ残ってしまうことがある。


今回はタイマーを使って常駐して行う動作を実現したが、もっといい方法があるかもしれない。


これで常駐するソフトを作ることができた。もちろん、ソフトによっては上にあげたすべてをやる必要はない。
とりあえずはこんな感じ。