非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

C#: タスクトレイに常駐するアプリの作り方

      2017/07/06

常駐アプリをC#で作る方法です。

今回の仕様として以下のことができるようにしたいと思います。

  1. タスクバーには表示させない
  2. タスクトレイにアイコンを置く
  3. タスクトレイのアイコンを右クリックするとメニューが現れる

まずは完成形

タスクトレイにアイコンが現れます。(わかりやすいように赤い四角のアイコン) このアイコンにマウスをかざすとテキストが現れるようになっています。

 

アイコン上で右クリックするとメニューが現れます。今回は終了できるようにしておきました。

[ad#top-1]

ソースコード

ソース全文はこちらです。こいつをコピペしてコンパイルすれば上で説明した動きをするアプリができます。

using System;
using System.Drawing;
using System.Windows.Forms;

class MainWindow{
  static void Main(){
    ResidentTest rm = new ResidentTest();
    Application.Run();
  }
}

class ResidentTest : Form{
  public ResidentTest(){
    this.ShowInTaskbar = false;
    this.setComponents();
  }

  private void Close_Click(object sender, EventArgs e){
    Application.Exit();
  }

  private void setComponents(){
    NotifyIcon icon = new NotifyIcon();
    icon.Icon = new Icon("app.ico");
    icon.Visible = true;
    icon.Text = "常駐アプリテスト";
    ContextMenuStrip menu = new ContextMenuStrip();
    ToolStripMenuItem menuItem = new ToolStripMenuItem();
    menuItem.Text = "&終了";
    menuItem.Click += new EventHandler(Close_Click);
    menu.Items.Add(menuItem);
    icon.ContextMenuStrip = menu;
  }
}
 

 

ソースコード解説

1.フォームを表示させない

まず最初にこのResidentTestクラスはFormを継承しているのですが、裏で動かすためにFormを非表示にしなければなりません。

通常、Formを表示させるGUIアプリの場合は、Mainメソッド内を以下のようにしていましたが、

static void Main(){
  Application.Run(ResidentTest());
}
 

 

↑これだとFormが表示されてしまうので、以下のようにします。これでFormが表示されません。

static void Main(){
  ResidentTest rm = new ResidentTest();
  Application.Run();
}
 

 

2. タスクバーに表示させない

佐バーに表示されてしまうと裏で動く常駐アプリにはなりませんので、コンストラクタ内に以下の一文を入れます。

this.ShowInTaskbar = false;
 

 

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

本題のタスクトレイにアイコンを表示させる方法ですが、NotifyIconクラスを使います。

NotifyIcon icon = new NotifyIcon();
icon.Icon = new Icon("app.ico");
icon.Visible = true;
icon.Text = "常駐アプリテスト";
 

 

4. 右クリックメニュー

で、最後に右クリックメニューを使って終了イベントを発生させますが、コードは以下の通り。

ContextMenuStrip menu = new ContextMenuStrip(); 
ToolStripMenuItem menuItem = new ToolStripMenuItem(); 
menuItem.Text = "&終了";
menuItem.Click += new EventHandler(Close_Click);
menu.Items.Add(menuItem); 
icon.ContextMenuStrip = menu;
 

 

イベントハンドラとしてClose_Clickメソッドを用意する必要があります。これで右クリックメニューの終了をクリックするとアプリが終了できます。

private void Close_Click(object sender, EventArgs e){
  Application.Exit();
}
 

 

関連記事

 

[ad#ad-1]

スポンサーリンク

 - C#応用編