Winform托盤控件NotifyIcon

using System;  
using System.Collections.Generic;  
using System.ComponentModel;  
using System.Data;  
using System.Drawing;  
using System.Linq;  
using System.Text;  
using System.Windows.Forms;  
  
using System.Windows;
using System.Runtime.InteropServices;

namespace W_TestDemo  
{  
    //NotifyIcon為托盤控件
    public partial class Form2 : Form   
    {  
        //這里在窗體上沒有拖拽一個(gè)NotifyIcon控件鳍徽,而是在這里定義了一個(gè)變量  
        private NotifyIcon notifyIcon = null;  
  
        public Form2()  
        {  
            InitializeComponent();  
            //調(diào)用初始化托盤顯示函數(shù)  
            InitialTray();

            RegisterHotKey(this.Handle, 10, MODKEY.ALT, Keys.X);
            RegisterHotKey(this.Handle, 11, MODKEY.ALT, Keys.S);
        }
        protected override void WndProc(ref Message m)
        {
            if (m.Msg == 0x0312)
            {
                switch (m.WParam.ToInt32())
                {
                    case 10:
                        {
                            this.Visible = true;
                            this.Activate();
                        }
                        break;
                    case 11:
                        {
                            this.Visible = true;
                            this.Activate();
                        }
                        break;
                    default:
                        break;
                }
                return;
            }
            base.WndProc(ref m);
        }

        //要定義熱鍵的窗口的句柄
        //定義熱鍵ID(不能與其它ID重復(fù))int id, 
        //標(biāo)識(shí)熱鍵是否在按Alt啤它、Ctrl舱卡、Shift胖笛、Windows等鍵時(shí)才會(huì)生效KeyModifiers fsModifiers,                 Keys vk                     //定義熱鍵的內(nèi)容
        [DllImport("user32.dll")]
        public static extern bool RegisterHotKey(IntPtr wnd, int id, MODKEY mode, Keys vk);

        [DllImport("user32.dll")]
        public static extern bool UnregisterHotKey(IntPtr wnd, int id);

        [Flags()]
        public enum MODKEY
        {
            None = 0,
            ALT = 0x0001,
            CTRL = 0x0002,
            SHIFT = 0x0004,
            WIN = 0x0008,
        }
  
        private void Form1_Load(object sender, EventArgs e)  
        {  
            //這里寫其他代碼  
        } 
  
        /// <summary>  
        /// 窗體關(guān)閉的單擊事件  
        /// </summary>  
        /// <param name="sender"></param>  
        /// <param name="e"></param>  
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)  
        {  
            e.Cancel = true;  
            //通過這里可以看出孟害,這里的關(guān)閉其實(shí)不是真正意義上的“關(guān)閉”,而是將窗體隱藏,實(shí)現(xiàn)一個(gè)“偽關(guān)閉”  
            this.Hide();  
        }  
  
        private void InitialTray()  
        {  
            //隱藏主窗體  
            this.Hide();  
  
            //實(shí)例化一個(gè)NotifyIcon對(duì)象  
            notifyIcon = new NotifyIcon();  
            //托盤圖標(biāo)氣泡顯示的內(nèi)容  
            notifyIcon.BalloonTipText = "正在后臺(tái)運(yùn)行";     
            //托盤圖標(biāo)顯示的內(nèi)容  
            notifyIcon.Text = "窗體托盤后臺(tái)運(yùn)行測(cè)試程序";  
            //注意:下面的路徑可以是絕對(duì)路徑沧奴、相對(duì)路徑。但是需要注意的是:文件必須是一個(gè).ico格式  
            notifyIcon.Icon = new System.Drawing.Icon("C:/Users/veepoo-cd/Desktop/veepoo.ico");  //絕對(duì)路徑
            //notifyIcon.Icon = 
            //true表示在托盤區(qū)可見歇竟,false表示在托盤區(qū)不可見  
            notifyIcon.Visible = true;  
            //氣泡顯示的時(shí)間(單位是毫秒)  
            notifyIcon.ShowBalloonTip(2000);              
            notifyIcon.MouseClick += new System.Windows.Forms.MouseEventHandler(notifyIcon_MouseClick);  
              
            ////設(shè)置二級(jí)菜單  
            //MenuItem setting1 = new MenuItem("二級(jí)菜單1");  
            //MenuItem setting2 = new MenuItem("二級(jí)菜單2");  
            //MenuItem setting = new MenuItem("一級(jí)菜單", new MenuItem[]{setting1,setting2});  
  
            //幫助選項(xiàng)挥唠,這里只是“有名無實(shí)”在菜單上只是顯示,單擊沒有效果焕议,可以參照下面的“退出菜單”實(shí)現(xiàn)單擊事件  
            MenuItem help = new MenuItem("幫助");
            help.Click += new EventHandler(help_Click);
  
            //關(guān)于選項(xiàng)  
            MenuItem about = new MenuItem("關(guān)于");
            about.Click += new EventHandler(about_Click);

            //退出菜單項(xiàng)  
            MenuItem exit = new MenuItem("退出");
            exit.Click += new EventHandler(exit_Click);  
  
            ////關(guān)聯(lián)托盤控件  
            //注釋的這一行與下一行的區(qū)別就是參數(shù)不同宝磨,setting這個(gè)參數(shù)是為了實(shí)現(xiàn)二級(jí)菜單  
            //MenuItem[] childen = new MenuItem[] { setting, help, about, exit };  
            MenuItem[] childen = new MenuItem[] {help,about,exit};  
            notifyIcon.ContextMenu = new ContextMenu(childen);  
  
            //窗體關(guān)閉時(shí)觸發(fā)  
            this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing);  
        }  
        
        /// <summary>  
        /// 鼠標(biāo)單擊  
        /// </summary>  
        /// <param name="sender"></param>  
        /// <param name="e"></param>  
        private void notifyIcon_MouseClick(object sender, System.Windows.Forms.MouseEventArgs e)  
        {  
            //鼠標(biāo)左鍵單擊  
            if (e.Button == MouseButtons.Left)  
            {  
                //如果窗體是可見的,那么鼠標(biāo)左擊托盤區(qū)圖標(biāo)后盅安,窗體為不可見  
                if (this.Visible == true )  
                {  
                    //this.Visible = false;  
                }  
                else  
                {  
                    this.Visible = true;  
                    this.Activate();  
                }  
            }  
        }  
  
        /// <summary>  
        /// 幫助選項(xiàng)  
        /// </summary>  
        /// <param name="sender"></param>  
        /// <param name="e"></param>  
        private void help_Click(object sender, EventArgs e)
        {
            MessageBox.Show("幫助唤锉,哈哈");
        }

        /// <summary>  
        /// 關(guān)于選項(xiàng)  
        /// </summary>  
        /// <param name="sender"></param>  
        /// <param name="e"></param>  
        private void about_Click(object sender, EventArgs e)
        {
            MessageBox.Show("關(guān)于,哈哈");
        }

        /// <summary>  
        /// 退出選項(xiàng)  
        /// </summary>  
        /// <param name="sender"></param>  
        /// <param name="e"></param>  
        private void exit_Click(object sender, EventArgs e)
        {
            //退出程序  
            System.Environment.Exit(0);
        }

    }  
}  
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末别瞭,一起剝皮案震驚了整個(gè)濱河市窿祥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蝙寨,老刑警劉巖晒衩,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異墙歪,居然都是意外死亡听系,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門虹菲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來靠胜,“玉大人,你說我怎么就攤上這事±四” “怎么了陕习?”我有些...
    開封第一講書人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長郑藏。 經(jīng)常有香客問我衡查,道長,這世上最難降的妖魔是什么必盖? 我笑而不...
    開封第一講書人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任拌牲,我火速辦了婚禮,結(jié)果婚禮上歌粥,老公的妹妹穿的比我還像新娘塌忽。我一直安慰自己,他們只是感情好失驶,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開白布土居。 她就那樣靜靜地躺著,像睡著了一般嬉探。 火紅的嫁衣襯著肌膚如雪擦耀。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,050評(píng)論 1 291
  • 那天涩堤,我揣著相機(jī)與錄音眷蜓,去河邊找鬼。 笑死胎围,一個(gè)胖子當(dāng)著我的面吹牛吁系,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播白魂,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼汽纤,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了福荸?” 一聲冷哼從身側(cè)響起蕴坪,我...
    開封第一講書人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎逞姿,沒想到半個(gè)月后辞嗡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡滞造,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年续室,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谒养。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡挺狰,死狀恐怖明郭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情丰泊,我是刑警寧澤薯定,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站瞳购,受9級(jí)特大地震影響话侄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜学赛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一年堆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧盏浇,春花似錦变丧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至滴劲,卻和暖如春攻晒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背班挖。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來泰國打工炎辨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人聪姿。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像乙嘀,于是被迫代替她去往敵國和親末购。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容