最小化至系統匣而非關閉
protected override void OnClosing(CancelEventArgs e)
{
e.Cancel = true; // 取消關閉
this.WindowState = FormWindowState.Minimized;
this.Hide(); // 隱藏工作列按鈕
}
系統匣右鍵選單 - 退出功能
private void menu_App_Exit(object sender, EventArgs e)
{
NativeWIN32.UnregisterHotKey(Handle, 100);
notifyIcon1.Visible = false;
Application.Exit();
}
右鍵選單動態啟用/停用
private void menu_App_BeforePopup(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Minimized)
{
App_Show.Enabled = true;
App_Hide.Enabled = false;
}
else
{
App_Show.Enabled = false;
App_Hide.Enabled = true;
}
}
Timer 定時掃描彈出視窗
m_Timer = new System.Timers.Timer();
m_Timer.Elapsed += OnTimerKillPopup;
m_Timer.Interval = 3000; // 3 秒
m_Timer.Enabled = true;
protected void OnTimerKillPopup(object sender, ElapsedEventArgs e)
{
m_Timer.Enabled = false; // 暫停避免重入
FindPopupToKill(); // 掃描並關閉彈出視窗
m_Timer.Enabled = true; // 恢復
}
設計要點
- 系統匣常駐:
ShowInTaskbar = false、notifyIcon.Visible = true
- 右鍵選單:工具箱拖曳
ContextMenu,滑鼠右鍵自動彈出
- Timer 選擇:
System.Timers.Timer (伺服器型) 適合背景作業,非 Windows.Forms.Timer
- 重入防護:執行掃描前暫停 Timer,完成後恢復