程序实现效果图

自定义锁定控件源码

/// <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实现倒计时锁定程序完整源码附注释相关推荐

  1. JAVA课程设计(小游戏贪吃蛇)完整源码附素材(二)

    目录 JAVA课程设计(小游戏贪吃蛇)完整源码附素材(一) JAVA课程设计(小游戏贪吃蛇)完整源码附素材(二) JAVA课程设计(小游戏贪吃蛇)完整源码附素材(三) 前言 1. 任务描述 1.1  ...

  2. 微信小程序 - [完整源码] 全屏左右菜单联动效果,左侧分类与右侧内容联动,类似美团饿了么的点餐页面 “左边菜单,右边内容“ 效果(开箱即用的示例源码,代码干净整洁且注释详细)

    前言 您可能需要:微信小程序 - 外卖点餐的左右联动功能界面(购物车加减商品,购物车自动计算金额等电商功能) 网上的教程样式和逻辑都太乱了(而且 BUG 一堆.各种真机运行不兼容),直接复制下来后代码 ...

  3. Java 编写潜艇大战游戏 窗体程序 完整源码

    今天为大家分享潜艇大战的开发与制作.整个系统界面漂亮,有完整源码提供,希望大家可以喜欢.喜欢的帮忙点赞和关注.一起编程.一起进步 开发环境 开发语言为Java,开发环境Eclipse或者IDEA都可以 ...

  4. Java 编写飞鸽传书系统 窗体程序 完整源码

    今天为大家分享简单的飞鸽传书程序的开发与制作,目前系统已经完成了初步功能,后续会进一步完善.整个系统界面漂亮,有完整源码,希望大家可以喜欢.喜欢的帮忙点赞和关注.一起编程.一起进步 开发环境 开发语言 ...

  5. 大转盘完整源码附效果图,可以下载直接用

    本转盘实现功能,可以动态配置奖品和转盘相关的任何图片,可以灵活配置使用.是基于 uni-app 实现的.可以在小程序或者H5,各端兼容使用. 效果图:因为GIF图的掉帧,所以显示抽奖的转动速度慢,实际 ...

  6. Java 编写斗地主游戏 窗体程序 完整源码

    今天为大家分享斗地主游戏的开发与制作,目前是单机版游戏,后续时间空了,会给大家分享下联机版本的开发与制作.整个系统界面漂亮,有完整得源码,希望大家可以喜欢.喜欢的帮忙点赞和关注.一起编程.一起进步 开 ...

  7. Java 编写捕鱼达人游戏 窗体程序 完整源码

    今天为大家分享捕鱼达人游戏的开发与制作,目前是单机版游戏,后续时间空了,会进一步完善.整个系统界面漂亮,有完整得源码,希望大家可以喜欢.喜欢的帮忙点赞和关注.一起编程.一起进步 开发环境 开发语言为J ...

  8. Java 编写在线考试系统-049 窗体程序 完整源码

    今天为大家分享一个java语言编写的在线考试系统-049,目前系统功能已经很全面,后续会进一步完善.整个系统界面漂亮,有完整得源码,希望大家可以喜欢.喜欢的帮忙点赞和关注.一起编程.一起进步 开发环境 ...

  9. Java 公司财务系统 窗体程序 完整源码

    今天为大家分享一个java语言编写的公司财务管理系统,目前系统已经完成了主要功能,后续会进一步完善.整个系统界面漂亮,有完整得源码,希望大家可以喜欢.喜欢的帮忙点赞和关注.一起编程.一起进步 开发环境 ...

最新文章

  1. python导入txt文件并绘图-Python实现读取txt文件并画三维图简单代码示例
  2. WPF(C#)与MATLAB混合编程
  3. Cannot find source code based button in SE24
  4. mui ajax 传递base64,HTML5 MUI 手机预览图片,裁剪上传base64,保存数据库
  5. hdu 3016 Man Down
  6. 264,avs中Skip宏块与Direct预测模式 ,对称模式的区别
  7. php.js 文件下载,使用JavaScript开始下载文件
  8. 一张小柴胡汤打天下- 四川名医马有度
  9. JAVA8的学习笔记之Collection
  10. 关于HTML5中hash部分API在历史管理,选项卡自动跳转中的一点使用
  11. java开源物联网智能家居系统
  12. cocos creator制作微信小游戏
  13. c语言析构函数的作用,详解析构函数出现的必要性
  14. [导入]关于Gmail无法链接的解决方法。
  15. 移动硬盘格式化了的数据找回方法
  16. 【数据库MySQL】数据库网上书店管理系统
  17. 如果能天天送书,天天爽就好了,再送5本
  18. IBM X3850 X5 7143QEB 安装Proxmox 5 初始化ramdisk失败,服务器卡死问题处理方法
  19. android sdk版本
  20. MySql性能优化之分区表

热门文章

  1. 最常见的管理误区,你中招了吗?
  2. 配置使用consol口和网线登录交换机
  3. 测试用例的设计-提高测试覆盖率
  4. vRealize Operations Manager 仪表板示图
  5. Not a managed type
  6. 「6.1K Star 项目推荐」github主页”快速装修“神器
  7. 数据分析-数据来源、字段类型、数据采集陷阱
  8. 方框加对勾怎么输入_Word与Excel中,如何在方框中打对勾?
  9. 速学TypeScript-精简划重点手册-上册
  10. [Halcon] license分享 — 2022.12月(持续更新)