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

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;
}
}
}

二、程序中调用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(, , );
this.Timer_MouseMove.Start();
} private void Timer_MouseMove_Tick(object sender, EventArgs e) {
try {
if (!MouseMonitorHelper.HaveUsedTo()) {
MouseMonitorHelper.CheckCount++;
if (MouseMonitorHelper.CheckCount == ) {
MouseMonitorHelper.CheckCount = ;
// 关闭按钮隐藏、鼠标隐藏
this.cnsExist.Visibility = Visibility.Hidden;
Mouse.OverrideCursor = Cursors.None;
}
} else MouseMonitorHelper.CheckCount = ;
} catch {
throw new NotImplementedException();
}
} private void DockPanel_MouseMove(object sender, MouseEventArgs e) {
this.cnsExist.Visibility = Visibility.Visible;
Mouse.OverrideCursor = Cursors.Arrow;

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

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

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

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

  2. Android实现app长时间未操作时自动退出app

    这里要考虑3个问题,第一个是锁屏问题,第二个是app被切换至后台的问题,第三个是屏幕锁定和解除时app在后台时的问题 一,监听屏幕解锁,锁定 ? 1 2 3 4 5 6 7 8 9 10 11 12 ...

  3. WinForm触摸屏程序功能界面长时间不操作自动关闭回到主界面 z

    操作者经常会在执行了某操作后,没有返还主界面就结束了操作然后离开了,程序应该关闭功能窗体自动回到主界面方便下一位操作者操作.那么对于WinForm程序怎么实现呢? 实现原理:拦截Application ...

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. mount挂载

    与ln -s 功能类似 # mount --bind /data/public /home/user/public /etc/fstab # <file system> <mount ...

  2. HTML中解决双击会选中文本的问题

    HTML中解决双击会选中文本的问题 <div unselectable="on" style="-moz-user-select:none;" onsel ...

  3. 有没有好用的开源sql语法分析器? - 匿名用户的回答 - 知乎

    有没有好用的开源sql语法分析器? - 匿名用户的回答 - 知乎 presto,hive,drill,calcite,sparksq

  4. 网站屏蔽指定ip

    修改.htaccess文件 Order Deny,Allow     //开启屏蔽Deny from 124.64.242.117  //要屏蔽的ip

  5. shell脚本中的特殊符号

    1.{} 大括号:用法一:通配符扩展eg: ls my_{finger,toe}s这条命令相当于如下命令的组合:ls my_fingers my_toeseg: mkdir {userA,userB, ...

  6. 2014年3月1日 Start && Unique Binary Search Trees

    早上和面试官聊天, 才发现自己的基础下降的有点厉害, 过去那个飘逸写程序的小青年, 如今有点走下坡路了. 可惜我不服,所以要开始做题,把水平恢复上来,能力是最重要的. 最近在做LeetCodeOJ的题 ...

  7. idea类似eclipse鼠标提示java api信息

    <ignore_js_op> 详细说明:http://java.662p.com/thread-2615-1-1.html

  8. dnw-linux的安装及使用

    <Tiny6410刷机指南>介绍了如何用USB线下载uboot,kernel,filesystem到开发板的nand flash,USB下载文件用到工具dnw.遗憾的是该教程提供的是win ...

  9. Jetson TK1 Restore 步骤

     Jetson TK1 Restore 步骤 下载驱动包和文件系统包: 1:驱动包 2:文件系统 具体参见文档:http://download.csdn.net/detail/xiabodan/7 ...

  10. 消息推送之APNS

    利用APNS进行消息推送 原理 APNS 是Apple Push Notification Service(Apple Push服务器)的缩写,是苹果的服务器. APNS推送可以分为三个阶段: 第一阶 ...