WinForm实现倒计时锁定程序完整源码附注释
程序实现效果图
自定义锁定控件源码
/// <summary>/// 监视鼠标键盘操作。/// </summary>public class UserStateMonitor : Component{//通过 Interval 属性调节扫描键盘鼠标状态的间隔时间,通过 Timeout 属性(无键盘操作时间间隔)控制判断是否离开/// <summary>/// 离开时间,单位:秒/// </summary>private int _timeout = 5000;private int _lastActiveTick;private Timer _timer;private int _interval = 1000;private bool _started;private bool _active = true;private static readonly object EventUseStateChanged = new object();public UserStateMonitor(): base(){}public UserStateMonitor(IContainer container): base(){container.Add(this);}public event UserStateChangedEventHandler UserStateChanged{add { base.Events.AddHandler(EventUseStateChanged, value); }remove { base.Events.RemoveHandler(EventUseStateChanged, value); }}/// <summary>/// 默认值:30分钟/// </summary>[DefaultValue(1800000)]public int Timeout{get { return _timeout; }set{_timeout = Math.Max(5000, value);}}[DefaultValue(1000)]public int Interval{get { return _interval; }set{_interval = Math.Max(500, value);if (_started){Timer.Change(0, _interval);}else{Timer.Change(System.Threading.Timeout.Infinite, _interval);}}}private Timer Timer{get {if (_timer == null){_timer = new Timer(new TimerCallback(delegate(object obj){LASTINPUTINFO lii = new LASTINPUTINFO();lii.size = 8;if (GetLastInputInfo(ref lii)){_lastActiveTick = Math.Max(lii.lastTick, _lastActiveTick);bool active = Environment.TickCount - _lastActiveTick < _timeout;if (_active != active){_active = active;OnUserStateChanged(new UserStateChangedEventArgs(active));}}}),null,System.Threading.Timeout.Infinite,_interval);}return _timer;}}public void Start(){if (!_started){Timer.Change(_interval, _interval);_started = true;}}/// <summary>/// 开始监控/// </summary>/// <param name="timeOut">监控时间间隔,单位:分钟</param>public void Start(int timeOut){if (!_started){_timeout = timeOut * 1000;//转换成秒Timer.Change(_interval, _interval);_started = true;}}public void Stop(){if (_started){Timer.Change(System.Threading.Timeout.Infinite, _interval);_started = false;}}[StructLayout(LayoutKind.Sequential)]private struct LASTINPUTINFO{public int size;public int lastTick;}[DllImport("user32.dll")]private static extern bool GetLastInputInfo(ref LASTINPUTINFO lii);protected virtual void OnUserStateChanged(UserStateChangedEventArgs e){UserStateChangedEventHandler handler =base.Events[EventUseStateChanged] as UserStateChangedEventHandler;if (handler != null){handler(this, e);}}protected override void Dispose(bool disposing){base.Dispose(disposing);if (disposing){Stop();if (_timer != null){_timer.Dispose();_timer = null;}}}}
自定义锁定控件之状态改变事件源码
public delegate void UserStateChangedEventHandler(object sender,UserStateChangedEventArgs e);public class UserStateChangedEventArgs : EventArgs{private bool _active;public UserStateChangedEventArgs(bool active): base(){_active = active;}public bool Active{get { return _active; }}}
自定义锁定控件调用源码
public Form1(){InitializeComponent();//判断是否长时间无操作userStateMonitor1.UserStateChanged += delegate (object sender, UserStateChangedEventArgs e){BeginInvoke(new MethodInvoker(delegate (){bool isLock = e.Active ? false : true;if (isLock){userStateMonitor1.Stop();DialogResult result = new FrmLockMsg().ShowDialog();if (result == DialogResult.OK){FrmLock frm = new FrmLock();this.Hide();DialogResult result2 = frm.ShowDialog();if (result2 == DialogResult.OK){this.Show();}}userStateMonitor1.Start();}}));};}private void Form1_Load(object sender, EventArgs e){int locktime = 0;//五秒无操作锁定 分钟*60int.TryParse("5", out locktime);if (locktime > 0){userStateMonitor1.Start(locktime );}}
WinForm实现倒计时锁定程序完整源码附注释相关推荐
- JAVA课程设计(小游戏贪吃蛇)完整源码附素材(二)
目录 JAVA课程设计(小游戏贪吃蛇)完整源码附素材(一) JAVA课程设计(小游戏贪吃蛇)完整源码附素材(二) JAVA课程设计(小游戏贪吃蛇)完整源码附素材(三) 前言 1. 任务描述 1.1 ...
- 微信小程序 - [完整源码] 全屏左右菜单联动效果,左侧分类与右侧内容联动,类似美团饿了么的点餐页面 “左边菜单,右边内容“ 效果(开箱即用的示例源码,代码干净整洁且注释详细)
前言 您可能需要:微信小程序 - 外卖点餐的左右联动功能界面(购物车加减商品,购物车自动计算金额等电商功能) 网上的教程样式和逻辑都太乱了(而且 BUG 一堆.各种真机运行不兼容),直接复制下来后代码 ...
- Java 编写潜艇大战游戏 窗体程序 完整源码
今天为大家分享潜艇大战的开发与制作.整个系统界面漂亮,有完整源码提供,希望大家可以喜欢.喜欢的帮忙点赞和关注.一起编程.一起进步 开发环境 开发语言为Java,开发环境Eclipse或者IDEA都可以 ...
- Java 编写飞鸽传书系统 窗体程序 完整源码
今天为大家分享简单的飞鸽传书程序的开发与制作,目前系统已经完成了初步功能,后续会进一步完善.整个系统界面漂亮,有完整源码,希望大家可以喜欢.喜欢的帮忙点赞和关注.一起编程.一起进步 开发环境 开发语言 ...
- 大转盘完整源码附效果图,可以下载直接用
本转盘实现功能,可以动态配置奖品和转盘相关的任何图片,可以灵活配置使用.是基于 uni-app 实现的.可以在小程序或者H5,各端兼容使用. 效果图:因为GIF图的掉帧,所以显示抽奖的转动速度慢,实际 ...
- Java 编写斗地主游戏 窗体程序 完整源码
今天为大家分享斗地主游戏的开发与制作,目前是单机版游戏,后续时间空了,会给大家分享下联机版本的开发与制作.整个系统界面漂亮,有完整得源码,希望大家可以喜欢.喜欢的帮忙点赞和关注.一起编程.一起进步 开 ...
- Java 编写捕鱼达人游戏 窗体程序 完整源码
今天为大家分享捕鱼达人游戏的开发与制作,目前是单机版游戏,后续时间空了,会进一步完善.整个系统界面漂亮,有完整得源码,希望大家可以喜欢.喜欢的帮忙点赞和关注.一起编程.一起进步 开发环境 开发语言为J ...
- Java 编写在线考试系统-049 窗体程序 完整源码
今天为大家分享一个java语言编写的在线考试系统-049,目前系统功能已经很全面,后续会进一步完善.整个系统界面漂亮,有完整得源码,希望大家可以喜欢.喜欢的帮忙点赞和关注.一起编程.一起进步 开发环境 ...
- Java 公司财务系统 窗体程序 完整源码
今天为大家分享一个java语言编写的公司财务管理系统,目前系统已经完成了主要功能,后续会进一步完善.整个系统界面漂亮,有完整得源码,希望大家可以喜欢.喜欢的帮忙点赞和关注.一起编程.一起进步 开发环境 ...
最新文章
- python导入txt文件并绘图-Python实现读取txt文件并画三维图简单代码示例
- WPF(C#)与MATLAB混合编程
- Cannot find source code based button in SE24
- mui ajax 传递base64,HTML5 MUI 手机预览图片,裁剪上传base64,保存数据库
- hdu 3016 Man Down
- 264,avs中Skip宏块与Direct预测模式 ,对称模式的区别
- php.js 文件下载,使用JavaScript开始下载文件
- 一张小柴胡汤打天下- 四川名医马有度
- JAVA8的学习笔记之Collection
- 关于HTML5中hash部分API在历史管理,选项卡自动跳转中的一点使用
- java开源物联网智能家居系统
- cocos creator制作微信小游戏
- c语言析构函数的作用,详解析构函数出现的必要性
- [导入]关于Gmail无法链接的解决方法。
- 移动硬盘格式化了的数据找回方法
- 【数据库MySQL】数据库网上书店管理系统
- 如果能天天送书,天天爽就好了,再送5本
- IBM X3850 X5 7143QEB 安装Proxmox 5 初始化ramdisk失败,服务器卡死问题处理方法
- android sdk版本
- MySql性能优化之分区表
热门文章
- 最常见的管理误区,你中招了吗?
- 配置使用consol口和网线登录交换机
- 测试用例的设计-提高测试覆盖率
- vRealize Operations Manager 仪表板示图
- Not a managed type
- 「6.1K Star 项目推荐」github主页”快速装修“神器
- 数据分析-数据来源、字段类型、数据采集陷阱
- 方框加对勾怎么输入_Word与Excel中,如何在方框中打对勾?
- 速学TypeScript-精简划重点手册-上册
- [Halcon] license分享 — 2022.12月(持续更新)