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

posted @ 2021-12-21 11:58  Lee597  阅读(534)  评论(1)    收藏  举报