C# Winform form 窗体N分钟没有操作,自动关闭【效果不理想】

用钩子处理比较好:https://www.cnblogs.com/vipsoft/p/18668517

C#中WndProc(ref Message m)是Control类中的方法,用来处理Windows消息。通过重写这个方法,你可以捕获和处理操作系统发送到窗体的各种消息,如按键、鼠标事件、绘制请求等。WndProc 方法允许你以低级别的方式与操作系统的窗口管理系统进行交互。

  • 安全性:处理窗口消息需要小心,因为不正确的处理可能会导致应用程序崩溃或不稳定。
  • 性能:尽量避免在WndProc中执行耗时操作,因为这可能会影响到应用程序的响应性。
  • 调用基类方法:在处理完你的消息后,务必调用base.WndProc(ref m),以确保消息能够正常传递和由其他处理程序处理。
  • 平台调用:有时候,你可能需要使用DllImport来从用户32 API中获取额外的功能或信息。
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    System.Windows.Forms.Timer mTimer = new System.Windows.Forms.Timer();
    const int WM_KEYDOWN = 0x0100;
    private DateTime mRecordTime = DateTime.Now;
    private void Form1_Load(object sender, EventArgs e)
    {
         mTimer.Tick += T1_Tick;
         mTimer.Start();//开启定时器
    }
    void T1_Tick(object sender, EventArgs e)
    {
        if ((DateTime.Now - mRecordTime).TotalSeconds >= 30) //记录时间大于1分钟
        {
            mTimer.Stop();
            for (int i = Application.OpenForms.Count - 1; i >= 0; i--)
            {
                Form item = Application.OpenForms[i];
                if (item.Name != this.Name && item.Name != "UserLogin") //关闭不是主窗体的打开窗体
                {
                    item.Close();
                }
            }
            this.WindowState = FormWindowState.Maximized;
        }
    }
    protected override void WndProc(ref Message m)//拦截windows消息
    {
        if(m.Msg == WM_KEYDOWN)//判断是否为键盘按下
            mRecordTime = DateTime.Now;
        base.WndProc(ref m);
    }
}
posted @   VipSoft  阅读(92)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 本地部署 DeepSeek:小白也能轻松搞定!
· 基于DeepSeek R1 满血版大模型的个人知识库,回答都源自对你专属文件的深度学习。
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 在缓慢中沉淀,在挑战中重生!2024个人总结!
· 大人,时代变了! 赶快把自有业务的本地AI“模型”训练起来!
点击右上角即可分享
微信分享提示