C#:隔离点击任务栏上的图标时的“最小化或者恢复”的效果

  通常点击任务栏上的图标时,对应窗体实现“最小化或者恢复”的效果。但是在做最小化到托盘时,不希望点击任务栏图标时最小化到托盘,即希望拦截了这些效果(不允许:通过点击任务栏上的图标,实现“最小化或者恢复”的效果);

具体实现代码如下:

        #region 区别 任务栏中点击窗体图标(最小化|恢复)与点击最小化按钮

        private int WM_SYSCOMMAND = 0x112;
        private long SC_MINIMIZE = 0xF020;
        protected override void WndProc(ref Message m)
        {
            if (m.Msg == WM_SYSCOMMAND)
            {
                if (m.WParam.ToInt64() == SC_MINIMIZE && m.LParam.ToString() != "0")    //m.LParam.ToString() != "0" 表示任务栏中点击窗体图标(最小化|恢复)
                {
                    HideMainForm(); //这里直接将窗体图盘化//this.isMinBoxHited = true;    //点击的是最小化按钮 通过中间变量不可行
                    return;
                }
            }
            base.WndProc(ref m);
        }

        #endregion
View Code

如果想实现其他效果可以参考如下:

    private int WM_SYSCOMMAND = 0x112;  
    private long SC_MAXIMIZE = 0xF030;  
    private long SC_MINIMIZE = 0xF020;  
    private long SC_CLOSE = 0xF060;  
    protected override void WndProc(ref Message m)  
    {  
        if (m.Msg == WM_SYSCOMMAND)  
        {  
            if (m.WParam.ToInt64() == SC_MAXIMIZE)  
            {  
                //MessageBox.Show("MAXIMIZE ");  
                return;  
            }  
            if (m.WParam.ToInt64() == SC_MINIMIZE)  
            {  
                //MessageBox.Show("MINIMIZE ");  
                return;  
            }  
            if (m.WParam.ToInt64() == SC_CLOSE)  
            {  
                //MessageBox.Show("CLOSE ");  
                return;  
            }  
        }  
        base.WndProc(ref m);  
    }  
View Code
原文地址:https://www.cnblogs.com/shenchao/p/4724694.html