C#一行程式碼實現(01)最小化到通知區域

易幾施發表於2020-10-24

C#一行程式碼實現系列原創分享

目錄

初步計劃完成以下內容

  1. 視窗程式

    1. 最小化到通知區域
    2. 設定開機啟動
    3. 關閉視窗前彈出確認視窗
    4. 跨執行緒設定控制元件值,免去InvokeRequired通用方法1
    5. 跨執行緒設定控制元件值,免去InvokeRequired通用方法2
    6. 跨執行緒獲取控制元件值,結合BeginInvokeEndInvoke使用
    7. 遍歷視窗所有控制元件
  2. 執行CMD程式

    1. 無視窗執行CMD程式
    2. 註冊OCX控制元件
  3. App.Config配置檔案讀寫

    1. App.Config引數
    2. App.Config引數
    3. 繫結控制元件TextApp.Config引數
  4. 登錄檔讀寫

    1. 讀登錄檔
    2. 寫登錄檔
  5. 文字檔案讀寫

    1. 讀文字檔案
    2. 寫文字檔案
  6. Win32API封裝

    1. 通過ClassNameWindowText模糊查詢所有頂級視窗
    2. 通過ClassNameWindowText模糊查詢視窗內所有子控制元件
    3. 傳送訊息
    4. 模擬點選其他程式視窗按鈕
    5. 在其他程式視窗上模擬按鍵
    6. 正常關閉其他視窗
    7. 強制關閉其他視窗
    8. 獲取視窗屬性
    9. 修改視窗屬性
    10. 獲取視窗位置和大小
    11. 修改視窗位置和大小
    12. 其他
  7. 先列到這裡,未完待續……

主要功能

  • 實現Winform程式最小化後,隱藏工作列顯示,在通知區域顯示。左鍵點選通知區域圖示,可以彈出選單,包含開機啟動退出程式,可以根據需求進行定製。

一行程式碼

private void Form1_Load(object sender, EventArgs e)
{
    this.ExAddNotifyIcon();
}

程式碼封裝

/// <summary>
/// 新增通知圖示,左鍵點選切換視窗顯示,右鍵點選彈出選單
/// </summary>
/// <param name="form"></param>
/// <param name="tipText"></param>
/// <param name="timeout"></param>
/// <param name="tipIcon"></param>
/// <returns></returns>
public static NotifyIcon ExAddNotifyIcon(this Form form, string tipText = "程式最小化至後臺執行,點選圖示顯示程式", int timeout = 3000, ToolTipIcon tipIcon = ToolTipIcon.Info)
{
    NotifyIcon notifyIcon = new NotifyIcon();
    notifyIcon.Icon = form.Icon;
    notifyIcon.Visible = true;
    notifyIcon.Text = form.Text;
    notifyIcon.BalloonTipText = form.Text;
    notifyIcon.MouseClick += (sender, args) =>
    {
        if (args.Button == MouseButtons.Left)
        {
            if (!form.Visible)
            {
                form.Show();
                form.WindowState = FormWindowState.Normal;
                form.TopMost = true;
                form.TopMost = false;
            }
            else
            {
                form.WindowState = FormWindowState.Minimized;
                form.Hide();
            }
        }
    };
    notifyIcon.ContextMenu = new ContextMenu(new MenuItem[]
    {
        new MenuItem("開機啟動", (sender, args) => { ((MenuItem) sender).Checked = form.ExSwitchRunOnSystemStart(); })
        {
            Checked = form.ExIsRunOnSystemStart()
        },
        new MenuItem("退出程式", (sender, args) => { form.Close(); }),
    });
    form.SizeChanged += (sender, args) =>
    {
        if (form.WindowState == FormWindowState.Minimized)
        {
            form.Hide();
            notifyIcon.ShowBalloonTip(timeout, form.Text, tipText, tipIcon);
        }
    };
    form.FormClosed += (sender, args) => { notifyIcon.Dispose(); };
    return notifyIcon;
}

宣告

相關文章