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 @   Lee597  阅读(509)  评论(1编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
点击右上角即可分享
微信分享提示