C#一行程式碼實現(01)最小化到通知區域
阿新 • • 發佈:2020-10-24
# C#一行程式碼實現系列原創分享
## 目錄
**初步計劃完成以下內容**
1. 視窗程式
1. 最小化到通知區域
1. [設定開機啟動](https://www.cnblogs.com/easynetwork/p/13867682.html)
1. [關閉視窗前彈出確認視窗](https://www.cnblogs.com/easynetwork/p/13867720.html)
1. [跨執行緒設定控制元件值,免去`InvokeRequired`通用方法1](https://www.cnblogs.com/easynetwork/p/13867963.html)
1. 跨執行緒設定控制元件值,免去`InvokeRequired`通用方法2
1. 跨執行緒獲取控制元件值,結合`BeginInvoke`和`EndInvoke`使用
1. 遍歷視窗所有控制元件
1. 執行CMD程式
1. 無視窗執行CMD程式
2. 註冊OCX控制元件
1. `App.Config`配置檔案讀寫
1. 讀`App.Config`引數
1. 寫`App.Config`引數
1. 繫結控制元件`Text`到`App.Config`引數
1. 登錄檔讀寫
1. 讀登錄檔
1. 寫登錄檔
1. 文字檔案讀寫
1. 讀文字檔案
1. 寫文字檔案
1. Win32API封裝
1. 通過`ClassName`和`WindowText`模糊查詢所有頂級視窗
1. 通過`ClassName`和`WindowText`模糊查詢視窗內所有子控制元件
1. 傳送訊息
1. 模擬點選其他程式視窗按鈕
1. 在其他程式視窗上模擬按鍵
1. 正常關閉其他視窗
1. 強制關閉其他視窗
1. 獲取視窗屬性
1. 修改視窗屬性
1. 獲取視窗位置和大小
1. 修改視窗位置和大小
1. 其他
1. 先列到這裡,未完待續……
## 主要功能
- 實現`Winform`程式最小化後,隱藏工作列顯示,在通知區域顯示。左鍵點選通知區域圖示,可以彈出選單,包含`開機啟動`和`退出程式`,可以根據需求進行定製。
## 一行程式碼
```
private void Form1_Load(object sender, EventArgs e)
{
this.ExAddNotifyIcon();
}
```
## 程式碼封裝
- 該方法已封裝在通用類庫`Sayaka.Common`
- NuGet網址:https://www.nuget.org/packages/Sayaka.Common/
```C#
///
/// 新增通知圖示,左鍵點選切換視窗顯示,右鍵點選彈出選單
///
///
///
///
///
///
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;
}
```
## 宣告
- 文章作者:易幾施
- 部落格地址:https://www.cnblogs.com/easynetwork/
- 版權宣告:文章遵循[創作共用版權協議](http://creativecommons.org/licenses/by-nc/3.0/deed.en),署名、非商業、保持一致,轉載請註明