タスクトレイに常駐するプログラム
右クリックでメニューを表示
- Program Class (Program.cs)
起動時にフォームが表示されないように設定
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
static class Program
{
/// <summary>
/// アプリケーションのメイン エントリ ポイントです。
/// </summary>
[STAThread]
static void Main()
{
frmMain frm = new frmMain();
Application.EnableVisualStyles();
Application.Run();
}
}
}
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Threading;
using System.ComponentModel;
namespace WindowsFormsApplication1
{
/// <summary>
/// メインフォーム
/// </summary>
public partial class frmMain : Form
{
private NotifyIcon ni;
private ContextMenuStrip menu;
private Container cont = new Container();
/// <summary>
/// 参考URL:http://tokyo.cool.ne.jp/chokuto/urawaza/message/WM_SYSCOMMAND.html
/// </summary>
// システムコマンド
private const int WM_SYSCOMMAND = 0x0112;
// ウィンドウ最小化
private const int SC_MINIMIZE = 0xf020;
/// <summary>
/// コンストラクタ
/// </summary>
public frmMain()
{
// コンポーネントの初期化
InitializeComponent();
Init();
}
/// <summary>
/// 初期化処理
/// </summary>
private void Init()
{
// アイコン作成用
Bitmap bmp = new Bitmap(15,15);
Graphics g = Graphics.FromImage(bmp);
// メニュー項目
ToolStripMenuItem menuItem;
ni = new NotifyIcon(cont);
menu = new ContextMenuStrip(cont);
// アイコンを作成
g.DrawString("あ", frmMain.DefaultFont, Brushes.Blue, 0, 0);
ni.Icon = System.Drawing.Icon.FromHandle(bmp.GetHicon());
// メニュー項目を追加
menuItem = new ToolStripMenuItem("表示");
menuItem.Click += menuItemShow_Click;
menu.Items.Add(menuItem);
menuItem = new ToolStripMenuItem("閉じる");
menuItem.Click += menuItemExit_Click;
menu.Items.Add(menuItem);
// NotifyIconを表示
ni.ContextMenuStrip = menu;
ni.Visible = true;
}
/// <summary>
/// 表示メニュークリック
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void menuItemShow_Click(object sender, EventArgs e)
{
this.Show();
}
/// <summary>
/// 閉じるメニュークリック
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void menuItemExit_Click(object sender, EventArgs e)
{
ExitProc();
}
/// <summary>
/// ウィンドウのメッセージを処理
/// </summary>
/// <param name="msg"></param>
protected override void WndProc(ref Message msg)
{
// 最小化ボタンを押下したか?
if ((msg.Msg == WM_SYSCOMMAND) && (((int)msg.WParam & 0xfff0) == SC_MINIMIZE))
{
this.Hide();
}
else
{
base.WndProc(ref msg);
}
}
/// <summary>
/// フォームクローズ後
/// </summary>
/// <param name="e"></param>
protected override void OnFormClosed(FormClosedEventArgs e)
{
base.OnFormClosed(e);
ExitProc();
}
/// <summary>
/// 終了操作
/// </summary>
private void ExitProc()
{
this.Dispose();
cont.Dispose();
// アプリケーションを終了
Application.Exit();
}
}
}
最終更新:2011年06月19日 00:31