1. 程式人生 > 其它 >C# 使用timer控制元件 定時關閉MessageBox

C# 使用timer控制元件 定時關閉MessageBox

#region 定時關閉MessageBox (使用timer)

[DllImport("user32.dll", EntryPoint = "FindWindow")]
private static extern IntPtr FindWindow(string IpClassName, string IpWindowName);

[DllImport("User32.dll", CharSet = CharSet.Auto)]
public static extern int SetWindowText(IntPtr hWnd, string text);

[DllImport("user32.dll", EntryPoint = "FindWindowEx")]
private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
/// <summary>
[DllImport("user32.dll", EntryPoint = "SendMessage")]
private static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);

const int WM_CLOSE = 0x10; // 傳送一個關閉訊息
//const int BM_CLICK = 0xF5; // 傳送一個點選訊息
IntPtr hwnd;
int t;

private void closeMessTimer_Tick(object sender, EventArgs e)
{
hwnd = FindWindow(null, "視窗將於" + t.ToString() + "秒後關閉");
t = t - 1;
SetWindowText(hwnd, "視窗將於" + t.ToString() + "秒後關閉");
if (t == 0)
{
closeMessTimer.Enabled = false;
SendMessage(hwnd, WM_CLOSE, 0, 0);
}
}

/// <summary>
/// 等待時間自動關閉訊息視窗,
/// wait_Time -> 想等幾秒就寫幾秒,
/// main_Message -> 寫訊息視窗的訊息內容
/// </summary>
/// <param name="wait_Time">等待時間,單位秒</param>
/// <param name="main_Message">主要內容</param>
private void WaitTimeAuToCloseMessageBox(int wait_Time,string main_Message)
{
t = wait_Time;
closeMessTimer.Enabled = true;
MessageBox.Show(main_Message, "視窗將於" + t + "秒後關閉", MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1);
}

#endregion