アットウィキロゴ

NotifyIcon

タスクトレイに常駐するプログラム

右クリックでメニューを表示


  • 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();
        }
    }
}

  • フォームのコード (Form1.cs)

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
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。
添付ファイル