操作者经常会在执行了某操作后,没有返还主界面就结束了操作然后离开了,程序应该关闭功能窗体自动回到主界面方便下一位操作者操作。那么对于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();
            }
       }

WinForm触摸屏程序功能界面长时间不操作自动关闭回到主界面 z的更多相关文章

  1. ASP.NET 工作流:支持长时间运行操作的 Web 应用程序

    ASP.NET 工作流 支持长时间运行操作的 Web 应用程序 Michael Kennedy   代码下载位置:MSDN 代码库 在线浏览代码 本文将介绍以下内容: 独立于进程的工作流 同步和异步活 ...

  2. WPF程序长时间无人操作

    在软件开发中为了安全性,特别是那些需要用到用户名和密码登录服务端的程序,常常考虑长期无人操作,程序自动跳转到用户登录界面. 判断程序是否长时间无人操作,有两个依据,第一个是鼠标长时间不动,第二个是鼠标 ...

  3. iOS开发笔记--如何实现程序长时间未操作退出

    我们使用金融软件经常会发现手机锁屏或者长时间未操作就会退出程序或者需要重新输入密码等情况.下面让我们看一下如何实现这种功能.我们知道iOS有一个事件循环机制,也就是大家所说的runloop.我们在对程 ...

  4. Web页面长时间无操作后再获取焦点时转到登录界面

    今天开始讲新浪博客搬到博客园.        在工作中遇到的小问题,感觉有点意思,就记录下来吧!        该问题分为两种情况,一.Web页面长时间无操作后,在对其进行操作,比如点击“首页”.“设 ...

  5. WPF窗口长时间无人操作鼠标自动隐藏

    在软件开发中有时会有等待一段时间无人操作后隐藏鼠标,可能原因大致如下: 1.为了安全性,特别是那些需要用到用户名和密码登录服务端的程序,常常考虑长期无人操作,程序自动跳转到用户登录界面: 2.软件为了 ...

  6. WPF:鼠标长时间无操作,窗口隐藏

    //设置鼠标长时间无操作计时器 private System.Timers.Timer MouseTimerTick = new System.Timers.Timer(10000); private ...

  7. SSH连接服务器时,长时间不操作就会断开的解决方案

    最近在配置服务器相关内容时候,不同的事情导致长时间不操作,页面就断开了连接,不能操作,只能关闭窗口,最后通过以下命令解决. SSH连接linux时,长时间不操作就断开的解决方案: 1.修改/etc/s ...

  8. web页面长时间未操作自动退出登录

    var lastTime = new Date().getTime(); var currentTime = new Date().getTime(); * * ; //设置超时时间: 10分 $(f ...

  9. hadoop jobhistory访问界面长时间打不开

    1.浏览器无法直接通过url访问 可能原因 :主机名未配置,因此无法识别,在 c:\windows\system32\drivers\etc 目录添加主机名和对应ip hostname1[主机名 ] ...

随机推荐

  1. 【仿携程JQuery日期价格表】

    今天比较闲所以就花点时间又写了点东西. 相信这种价格表大家不会陌生 现在我就模仿它做一个简单版本的.效果如下 首先需要两个时间控件,我这里用的是HTML5里面的时间控件,这个没限制喜欢用什么就用什么 ...

  2. git 使用事项

    基本安装可查看 http://help.github.com 如果删除了本地的文件,要恢复相关文件,在github存在(别人增加的),则:git pull <远程主机名> <远程分支 ...

  3. FBWF和EWF的对比

    最近在公司接触了嵌入式的wes7系统,wes7和wes2009是组件化的windows系统,除具有最新版的windows功能之外还具有适用于嵌入式系统的一些嵌入式功能,如例如EWF,FBWF. FBW ...

  4. Asp.net 导入Excel数据

    前台代码: <body> <form id="form1" runat="server"> <div> <asp:Fi ...

  5. linux shell命令的常用快捷键

    一些shell的常用快捷键.   Ctrl + a 切换到命令行开始  Ctrl + e 切换到命令行末尾  Ctrl + l 清除屏幕内容  Ctrl + u 清除剪切光标之前的内容  Ctrl + ...

  6. m2e插件的新下载地址

    今天在按照<Maven实战>这本书给eclipse配置maven的m2eclipse插件的时候发现,书中写的老的下载地址http://m2eclipse.sonatype.org/site ...

  7. django1.6之mysql配置

    # Database# https://docs.djangoproject.com/en/1.6/ref/settings/#databases setting 配置修改 INSTALLED_APP ...

  8. 【方言】Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set

    Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set 几种 方言配置差异 <?xml v ...

  9. DB天气安卓客户端测试计划

      分辨率 屏幕ppi 网络环境 操作系统 os 用户类型 地点 组合总数 其他 samsung                   htc                   小米         ...

  10. GDB多进程调试(转)

    http://www.cnblogs.com/ggjucheng/archive/2011/12/15/2288710.html GDB 是 linux 系统上常用的 c/c++ 调试工具,功能十分强 ...