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

时间:2023-12-10 13:45:14

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

具体实现代码如下:

        #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() != "") //m.LParam.ToString() != "0" 表示任务栏中点击窗体图标(最小化|恢复)
{
HideMainForm(); //这里直接将窗体图盘化//this.isMinBoxHited = true; //点击的是最小化按钮 通过中间变量不可行
return;
}
}
base.WndProc(ref m);
} #endregion

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

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