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

原文:WPF窗口长时间无人操作鼠标自动隐藏

在软件开发中有时会有等待一段时间无人操作后隐藏鼠标,可能原因大致如下:

1.为了安全性,特别是那些需要用到用户名和密码登录服务端的程序,常常考虑长期无人操作,程序自动跳转到用户登录界面;

2.软件为了更好的播放效果,需要隐藏鼠标。

这里写的是第二种情况,wpf做播放时,需要隐藏鼠标。

思路是:假如3s鼠标不动则隐藏,设计了计时器的间隔时间为1s,并添加鼠标没移动的计数器,计数器达到3才执行程序。实现是这样的:每隔1s检测鼠标是否移动,如果不移动则计数器加1,如果中途鼠标移动,则计数器清零,要达到计数器计数为3,则要3次鼠标检测中鼠标都不移动,这样从鼠标停止移动,到计数器达到3,刚好是3s,能够达到3s鼠标不动则隐藏程序执行;

一、封装好的监视鼠标移动的类文件:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Runtime.InteropServices;

namespace EBS.Common {
    public class MouseMonitorHelper {
        private static Point mousePosition;    //鼠标的位置
        public static int CheckCount;   //检测鼠标位置的次数

        //判断鼠标是否移动
        public static bool HaveUsedTo() {
            Point point = GetMousePoint();
            if (point == mousePosition) return false;
            mousePosition = point; return true;
        }

        [StructLayout(LayoutKind.Sequential)]
        private struct MPoint {
            public int X;
            public int Y;
            public MPoint(int x, int y) {
                this.X = x;
                this.Y = y;
            }
        }

        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        private static extern bool GetCursorPos(out MPoint mpt);

        // 获取当前屏幕鼠标位置
        public static Point GetMousePoint() {
            MPoint mpt = new MPoint();
            GetCursorPos(out mpt);
            Point p = new Point(mpt.X, mpt.Y);
            return p;
        }
    }
}

View Code

 

二、程序中调用Timer事件:

private DispatcherTimer Timer_MouseMove;

private void Window_Loaded(object sender, RoutedEventArgs e) {
            // 设置鼠标隐藏、显示
            this.Timer_MouseMove = new DispatcherTimer();
            this.Timer_MouseMove.Tick +=new EventHandler(Timer_MouseMove_Tick);
            this.Timer_MouseMove.Interval = new TimeSpan(0, 0, 1);
            this.Timer_MouseMove.Start();
        }

private void Timer_MouseMove_Tick(object sender, EventArgs e) {
            try {
                if (!MouseMonitorHelper.HaveUsedTo()) {
                    MouseMonitorHelper.CheckCount++;
                    if (MouseMonitorHelper.CheckCount == 3) {
                        MouseMonitorHelper.CheckCount = 0;
                        // 关闭按钮隐藏、鼠标隐藏
                        this.cnsExist.Visibility = Visibility.Hidden;
                        Mouse.OverrideCursor = Cursors.None;
                    }
                } else MouseMonitorHelper.CheckCount = 0;
            } catch {
                throw new NotImplementedException();
            }
        }

private void DockPanel_MouseMove(object sender, MouseEventArgs e) {
            this.cnsExist.Visibility = Visibility.Visible;
            Mouse.OverrideCursor = Cursors.Arrow;

View Code

另外如果有设计到鼠标焦点的情况,请参考WPF程序长时间无人操作

 

 

 

时间: 2024-08-03 19:22:50

WPF窗口长时间无人操作鼠标自动隐藏的相关文章

jboss7-程序如果长时间没有操作 Destroying connection

问题描述 程序如果长时间没有操作 Destroying connection 14:46:25,137 WARN org.jboss.jca.core.connectionmanager.pool.strategy.OnePool IJ000612: Destroying connection that could not be successfully matched: org.jboss.jca.core.connectionmanager.listener.TxConnectionList

vc++编程问题-判断一段时间无人操作如何实现

问题描述 判断一段时间无人操作如何实现 VC++如何判断电脑一段时间无操作,类似QQ的离开状态判断,用VC++怎么实现? 解决方案 参考计算机一段时间不操作进入屏保模式的程序.

用VB.NET做的SOCKET,连接客户端后如果长时间没操作是不是会自动断开的?

问题描述 用VB.NET做的SOCKET在本机测试,就是客户端与服务端在同一台机器上.连接上后,不会出现自己断开的情况.那怕是挂着几天都还是连接着的但是如果把服务端放到服务器上,然后用外网连接上服务器.一段时间后就会被断开了大约是30分钟到1小时这样.有时候就算有操作也会被断开.被断开的情况服务器与客户端都没有收到断开错误.但事实上是已经断了的...请问这个什么问题.谢谢 解决方案 解决方案二:不会,请参考:解决方案三:感谢解决方案四:做socket通讯的时候,客户端和服务器端都定时发个数据过去

登录后 长时间不操作 超时注销

系统有自带设置可以实现session超时 Java代码   session.gc_maxlifetime = 1440 #(PHP5默认24分钟)   这里你可以随便设置一下过期时间.但是有人说设置以后,好象不起作用!其实不是不起作用,而是因为系统session回收机制是按机率启动的,可能在某一个长时间内都没有被启动.   以下是我的思路: 首先设置一个登录正确的开始时:$_SESSION['LOGIN_TIME'] = time(); 然后判断现在的时间: $times = time(); 最

新版sdk,长时间不操作,再次发信息一直发不出去,log日志显示chatservice start sticky

问题描述 环信Demo2.2.2,等待5分钟不操作,再次聊天会一直在发送中,需要发送1分多钟才能把信息发送出去,查看log日志,五分钟不操作,就显示chatservice start sticky,然后发信息就一直在转圈圈,网络一切都正常.求解释~~ 解决方案 这个是Android版的问题.

win8如何设置长时间不操作电脑自动关闭键盘背光灯

在桌面模式下,按键盘的[Fn]+[F1]组合键打开"Settings"软件.     2. 选择[常规],点击[键盘背光].    3. 将"键盘背光"下方的"当计算机超过下列时间长度未使用时,关闭键盘背光"勾选,如下图所示:   4. 左右滑动下方的滑块可以设定具体未使用的时间,如下图所示:  

无论是ios 还是安卓,在长时间不操作之后会收不到消息,必须要点chatview 才能收到消息

问题描述 解决方案 建议您这边直接下载下环信的demo,然后换上appkey来测试下了,看看有没有这个具体的问题了,嗯.

spring mvc-Springmvc中如何设置登录一个账号长时间不进行操作 就会自动跳出登录页面?

问题描述 Springmvc中如何设置登录一个账号长时间不进行操作 就会自动跳出登录页面? Springmvc中如何设置登录一个账号长时间不进行操作 就会自动跳出登录页面? 解决方案 方法有很多种. 我推荐你用filter来做, filter作为验证用户提交的请求(当user==null时跳转) 而当前用户的登录信息放进session中即可, 长时间不操作会自动清除的. 解决方案二: shiro.设置超时 解决方案三: 配置文件里配置session时效 解决方案四: 把session设置一下时效

android-安卓登录一段时间为操作自动退出,怎么实现啊。

问题描述 安卓登录一段时间为操作自动退出,怎么实现啊. 大家好,我现在在学习安卓,现在要实现一个功能--用户登录编写的程序后一段时间未操作会自动退出.自己没有思路,希望大家提示一下. 解决方案 1.为所有的Activity定义一个基类BaseActivity,程序中的所有Activity都继承自这个基类. 2.重写BaseActivity的dispatchTouchEvent()方法,只要监听到此方法,表明用户操作,纪录这个时间. 3.写一个定时器Timer,每1秒检查一次当前系统时间上次操作的