タスクトレイにアイコンを表示するには!?
タスクトレイ(Windowsのタスクバーの右下にあるアイコンが並んでいる場所で、通知領域が正式名称)にアプリのアイコンを表示するためには、System.Windows.Forms.NotifyIcon
クラスを使います。
このクラスを使うことで、タスクトレイへのアイコン表示や右クリックメニューの追加、クリックイベントの設定が可能です。
この記事ではタスクトレイにアイコンを表示する方法や右クリックメニューを追加する方法等を分かりやすく解説しています。また、アイコン(*.ico)を作成する際に使えるオススメのサイトも紹介します。
この記事では以下の動作環境で実装しています。
開発環境
- OS:Windows 11
- 統合開発環境:Visual Studio 2022
- .NETバージョン:.NET 7
是非参考してみてください。
オススメの参考書
C#の使い方が丁寧に解説しており、「基礎からしっかりと学びたい」という初心者の方にオススメの一冊です。サンプルコードも記載してあり、各章の最後に復習問題があるので理解度を確認しながら読み進めることができます。新しい C# のバージョンにも対応している書籍です。
タスクトレイにアイコンを表示する方法
それではNotifyIcon
を使用して、タクトトレイにアイコンを表示する方法について紹介をします。
事前準備
WPFでNotifyIcon
を使用するには、WPFのプロジェクトファイルでSystem.Windows.Forms
を扱えるように設定する必要があります。
この設定は難しくなく、プロジェクトファイルを開いてコードを1行追加するだけの作業です。
手順は以下の通りです。
ソリューションエクスプローラーのプロジェクト名をダブルクリックします。
<PropertyGroup>
内に以下のコード(8行目)を追加します。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net7.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<UseWPF>true</UseWPF>
<UseWindowsForms>true</UseWindowsForms>
</PropertyGroup>
</Project>
追加したコードを反映させるために、プロジェクトをビルドしておきましょう。
アイコン準備
タスクトレイに表示するアイコンを準備します。アイコンのファイル形式は「*.ico」です。
drawソフトを使用してアイコンを作成することもできますが、ここでは画像ファイルをアイコンファイルに変換するサイトを紹介します。画像ファイル(*.png)をサクッとアイコンファイルに変換できます。
変換サイトの詳しい使い方は以下の記事で紹介していますので、参考にしてみて下さい。
アイコンファイルはプロジェクトに追加しておきます。
プロジェクトファイルを右クリックして[プロパティ]を選択し、プロパティを開きます。右側の項目一覧から[リソース]を選択し、アイコンファイルをドラッグアンドドロップして追加します。
リソースに追加されると下図のようにアイコンの画像と名前が表示されます。プロジェクトには[Resources]フォルダが作成され、そのフォルダの中にアイコンファイルが保存されます。
実装①
MainWindow.xaml.csに、NotifyIcon
のインスタンスを作成し、アイコンを設定します。
アイコンはResources
クラスからアイコンファイルの名前を指定すれば取得できます。
using System.Windows;
using System.Windows.Forms;
namespace NotifyIconSample
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private NotifyIcon notifyIcon;
public MainWindow()
{
InitializeComponent();
SetupNotifyIcon();
}
/// <summary>
/// NotifyIconをセットアップする
/// </summary>
private void SetupNotifyIcon()
{
var icon = Properties.Resources.sample;
notifyIcon = new NotifyIcon
{
Visible = true,
Icon = icon,
Text = "タスクトレイに表示"
};
}
}
}
Visible
プロパティはタスクトレイにアイコンを表示するかどうかを選択できます。true
の場合、表示されます。
Icon
プロパティはタスクトレイに表示するアイコンファイルを設定します。
Text
プロパティはタスクトレイのアイコンにマウスオーバーした際に表示されるテキストです。
このコードを実行すると、次のようにタスクトレイにアイコンが表示されます。
実装②
続いて、コンテキストメニューを追加します。タスクトレイに表示されたアイコンを右クリックするとメニューが表示されるようになります。
ContextMenuStrip
プロパティにメニューを設定します。メニューのアイテムの間にセパレーターを追加したい場合はToolStripSeparator
を追加しましょう。
using System;
using System.Windows;
using System.Windows.Forms;
namespace NotifyIconSample
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private NotifyIcon notifyIcon;
public MainWindow()
{
InitializeComponent();
SetupNotifyIcon();
}
/// <summary>
/// NotifyIconをセットアップする
/// </summary>
private void SetupNotifyIcon()
{
var icon = Properties.Resources.sample;
var contextMenuStrip = new ContextMenuStrip();
contextMenuStrip.Items.AddRange(new ToolStripItem[]
{
new ToolStripMenuItem("バージョン v1.0.0")
{
Enabled = false
},
new ToolStripSeparator(),
new ToolStripMenuItem("終了", null, Exit_Click)
});
notifyIcon = new NotifyIcon
{
Visible = true,
Icon = icon,
Text = "タスクトレイに表示",
ContextMenuStrip = contextMenuStrip
};
}
private void Exit_Click(object? sender, EventArgs e)
{
notifyIcon.Visible = false;
Close();
}
}
}
このコードを実行すると、次のように右クリックした時にメニューが表示されます。
実装③
続いて、タスクトレイに表示されたアイコンを左クリックするとアプリケーションが表示または非表示になる機能を追加します。
NotifyIcon
クラスのMouseClick
イベントを実装することで、マウスでクリックした時の動作を定義することができます。
using System;
using System.Windows;
using System.Windows.Forms;
namespace NotifyIconSample
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private NotifyIcon notifyIcon;
public MainWindow()
{
InitializeComponent();
SetupNotifyIcon();
}
/// <summary>
/// NotifyIconをセットアップする
/// </summary>
private void SetupNotifyIcon()
{
var icon = Properties.Resources.sample;
var contextMenuStrip = new ContextMenuStrip();
contextMenuStrip.Items.AddRange(new ToolStripItem[]
{
new ToolStripMenuItem("バージョン v1.0.0")
{
Enabled = false
},
new ToolStripSeparator(),
new ToolStripMenuItem("終了", null, Exit_Click)
});
notifyIcon = new NotifyIcon
{
Visible = true,
Icon = icon,
Text = "タスクトレイに表示",
ContextMenuStrip = contextMenuStrip
};
// アイコンクリック時のイベント設定
notifyIcon.MouseClick += NotifyIcon_MouseClick;
}
private void Exit_Click(object? sender, EventArgs e)
{
notifyIcon.Visible = false;
Close();
}
private void NotifyIcon_MouseClick(object? sender, MouseEventArgs e)
{
if (e.Button != MouseButtons.Left)
{
return;
}
// 左クリック時の処理
if (this.IsVisible)
{
this.Hide();
}
else
{
this.Show();
}
}
}
}
まとめ
この記事では、タスクトレイにアイコンを表示する方法を紹介しました。
System.Windows.Forms
のNotifyIcon
クラスを使用することで、 WPF のアプリケーションでも簡単にタスクトレイにアイコンを表示することができます。アイコンで使うファイル形式はアイコンファイル(*.ico)である必要があり、今回紹介した画像変換ツールを使うことでアイコンファイルを簡単に生成することができます。
この記事で紹介したコードを参考に、自分のアプリに合わせてカスタマイズしてみてください。
以上、最後まで読んで頂きありがとうございました。