WinForm触摸屏程序功能界面长时间不操作自动关闭回到主界面
对于大多数触摸屏程序来说,操作者经常会在执行了某操作后,没有返还主界面就结束了操作然后离开了,程序应该关闭功能窗体自动回到主界面方便下一位操作者操作。那么对于WinForm程序怎么实现呢?
实现原理:拦截Application响应操作系统发送到消息,如果是比如KeyDown、Mouse Move等输入设备相关的Message ID则表示程序是在有人操作的状态,反之则使用一个计数器累积到某值,也就是相当于多长时间无人操作则关闭功能界面回到主界面。使用Application.AddMessageFilter方法添加消息的过滤机制。
IMessageFilter接口: 消息筛选器接口。命名空间: System.Windows.Forms
程序集: System.Windows.Forms(在 system.windows.forms.dll 中)。AddMessageFilter方法传递的参数为实现IMessageFilter的一个类,那么必须实现PreFilterMessage方法,这就是实现消息筛选的方法。
代码实现:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; namespace WinFormApp { public class MyMessageFilter : IMessageFilter { public int iOperCount { get ; set ; } #region IMessageFilter 成员 public bool PreFilterMessage( ref Message m) { //如果检测到有鼠标或则键盘的消息 可添加其他消息ID如触摸屏的点击事件ID if (m.Msg == ( int )WindowsMessages.WM_KEYDOWN || m.Msg == 513 || m.Msg == 515 || m.Msg == 516 || m.Msg == 522 //|| m.Msg == (int)WindowsMessages.WM_MOUSEMOVE //|| m.Msg == (int)WindowsMessages.WM_LBUTTONDOWN //|| m.Msg == (int)WindowsMessages.WM_RBUTTONDOWN || m.Msg == ( int )WindowsMessages.WM_MBUTTONDOWN ) { iOperCount = 0; } return false ; } #endregion } } |
应用程序入口添加消息监控、过滤:
public static MyMessageFilter msgFilter = new MyMessageFilter(); [STAThread] static void Main() { Application.AddMessageFilter(msgFilter); Application.Run( new frmMain()); } |
程序主界面开启一个定时器:
/// <summary> /// 定时器设置为每10秒触发一次 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void timer1_Tick( object sender, EventArgs e) { Program.msgFilter.iOperCount++; if (Program.msgFilter.iOperCount > CLOSE_TIME) { if (Application.OpenForms.Count > 1) foreach (Form mdiFrm in Application.OpenForms) if (mdiFrm.Name.ToLower() != "frmmain" ) mdiFrm.Close(); } } |
作者:数据酷软件
出处:https://www.cnblogs.com/datacool/p/WinFormApplicationMessageFilter.html
关于作者:20年编程从业经验,持续关注MES/ERP/POS/WMS/工业自动化
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明。
联系方式: qq:71008973;wx:6857740733
基于人脸识别的考勤系统 地址: https://gitee.com/afeng124/viewface_attendance_ext
自己开发安卓应用框架 地址: https://gitee.com/afeng124/android-app-frame
WPOS(warehouse+pos) 后台演示地址: http://47.239.106.75:8080/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?