记录|如何全局监听鼠标和键盘等事件

news/2024/9/17 22:32:06/ 标签: visual studio, winform, c#

目录

  • 前言
  • 一、MyMessager类
  • 二、Form中进行Timer监听
  • 更新时间


前言

参考文章:
C# winfrom 长时间检查不到操作,自动关闭应用程序

本来是想,如果一段时间没有操作软件,这个软件就自动退出的任务。但是在C#中,采用winform后,有很大的困难。表现为:

  • 监听困难,理论上是只要进行Form监听就可以了,但是实际上Form上面有许多的Panel和Button等控件在上面进行监听,所以如果要写鼠标、按钮等监听事件,会导致要N多个控件的重复性写法。
  • 一查找这种全局监听的,很多CSDN中都采用HOOK钩子的写法。而这种写法一则我没用过,二则会和系统抢资源,属于影响性能的一种方法。

后来,看了上面的文章后,自己进行了实验,发现这种方法确实可行。现在将复刻后的代码公布如下:


一、MyMessager类

这里创建个MyMessager类,对Messager信息进行监听。【类的代码如下:】

  • iOperCount,创建为public类,是为了调用的时候来进行运行时间判断。
namespace ZHCH_winform_2.manager
{internal class MyMessager : IMessageFilter{public int iOperCount { get; set; }public bool PreFilterMessage(ref Message m){// 如果检测到有鼠标或则键盘的消息,则使计数为0if(m.Msg==0x0200 || m.Msg==0x0201 || m.Msg==0x0204 || m.Msg == 0x0207){iOperCount = 0;}return false;}}
}

二、Form中进行Timer监听

  • 初始化MyMessager类msg。
        private MyMessager msg = new MyMessager();//public FormMain(){InitializeComponent();this.KeyPreview = true; // 允许窗体接收按键事件}
  • 在Form类FormMain加载时,进行消息监听【采用了定时器Timer,命名为:timerMoniter】
private void FormMain_Load(object sender, EventArgs e){Application.AddMessageFilter(msg);timerMoniter.Start();}
  • 定时器中的监听事件如下:
        /// <summary>/// 全局监控鼠标、键盘等事件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void timerMoniter_Tick(object sender, EventArgs e){//如果计数=0,代表触发了按钮,鼠标等事件,那么就要重新计时。if (msg.iOperCount == 0){ResetLogoutSeconds();}int iOperCount = msg.iOperCount++;// 如果计数超过了设定的最大时间,就退出登录if (iOperCount > this.MaxSeconds || logoutSeconds <= 0){MessageBox.Show($"{this.MaxSeconds}已经到达");Application.Exit();}// 倒计时的循环if (logoutSeconds > 0){this.progressLogout.Text = logoutSeconds.ToString() + " S";float progressValue = (float)(logoutSeconds / MaxSeconds);this.progressLogout.Value = progressValue;logoutSeconds--;}}/// <summary>/// 重写键盘读取事件/// </summary>/// <param name="e"></param>protected override void OnKeyDown(KeyEventArgs e){ResetLogoutSeconds();//base.OnKeyDown(e);}/// <summary>/// 重置倒计时时间/// </summary>private void ResetLogoutSeconds(){logoutSeconds = 120;progressLogout.Text = logoutSeconds.ToString() + " S";this.progressLogout.Value = 1;}

更新时间

  • 2024.08.26:创建并复刻成功

http://www.ppmy.cn/news/1518621.html

相关文章

Google Earth Engine:对NDVI进行惠特克平滑算法进行长时序分析

目录 简介 函数 ee.Array.identity(size) Arguments: Returns: Array transpose(axis1, axis2) Arguments: Returns: Array matrixMultiply(image2) Arguments: Returns: Image matrixSolve(image2) Arguments: Returns: Image arrayFlatten(coordinateLabels, …

Qt应用的高分辨率适配

背景 工作中需要面对触控大屏的4K分辨率场景&#xff0c;同时也有越来越多人开始使用高分屏&#xff0c;原来多基于1080p分辨率开发的Qt程序无法很好适配更高的分辨率。 没有特意针对高分辨率场景做适配时&#xff0c;Qt应用的表现通常有两种情况&#xff1a; 分辨率高的情况…

波导阵列天线单元学习笔记7 一种用直接金属激光烧结考虑的轻质量,宽带,双圆极化波导腔体阵列

摘要&#xff1a; 提出了一种工作在Ku频段的轻质量&#xff0c;宽带&#xff0c;双圆极化波导腔体阵列。为了获得双正交的线极化&#xff0c;基本的辐射单元是由两个波导馈电的方形腔体。通过恰当地对馈网进行调谐&#xff0c;可以获得对于两个正交极化的等辐同相辐射电场&…

智能指针(RAII)

智能指针&#xff08;RAII&#xff09; 一、内存泄漏1、介绍2、原因3、泄漏的内存类型分类 二、RAII1、介绍2、基本思想3、优点4、实现方式 三、unique_ptr1、介绍2、主要特性3、注意事项4、unique_ptr类5、示例代码6、运行结果7、简单实现 四、shared_ptr1、介绍2、主要特点3、…

如何处理时间序列异常值?理解、检测和替换时间序列中的异常值

异常值的类型 (欢迎来到雲闪世界) 异常值是与正常行为有显著偏差的观察结果。 时间序列可能会因某些异常和非重复事件而出现异常值。这些异常值会影响时间序列分析&#xff0c;并误导从业者得出错误的结论或有缺陷的预测。因此&#xff0c;识别和处理异常值是确保时间序列建模…

【TDesign】如何修改CSS变量

Tdesign的组件想通过style定义样式没效果, 可以通过组件api文档修改, 组件提供了下列 CSS 变量&#xff0c;可用于自定义样式。 比如Cell, https://tdesign.tencent.com/miniprogram/components/cell?tabapi 提供了&#xff1a; –td-cell-left-icon-color 图标颜色 –td-cell…

【Leetcode 2341 】 数组能形成多少数对 —— 去重

给你一个下标从 0 开始的整数数组 nums 。在一步操作中&#xff0c;你可以执行以下步骤&#xff1a; 从 nums 选出 两个 相等的 整数从 nums 中移除这两个整数&#xff0c;形成一个 数对 请你在 nums 上多次执行此操作直到无法继续执行。 返回一个下标从 0 开始、长度为 2 的…

电脑变声器软件哪个好用?最新款实时变声器数据公开!

电脑变声器软件哪个好用&#xff1f;什么场合下需要用到变声器&#xff1f;在派对或朋友聚会中&#xff0c;使用变声器可以模仿各种动物、名人或虚构角色的声音&#xff1b;直播变声搞怪&#xff1b;匿名游戏聊天&#xff1b;电影、动画、电视音效、旁白制作等等&#xff0c;都…

高职院校大数据分析与可视化微服务架构实训室解决方案

一、前言 随着信息技术的飞速发展&#xff0c;大数据已成为推动社会进步与产业升级的关键力量。为了培养适应未来市场需求的高素质技术技能型人才&#xff0c;高职院校纷纷加大对大数据分析与可视化技术的教学投入。唯众&#xff0c;作为国内领先的职业教育解决方案提供商&…

2 Python开发工具:PyCharm的安装和使用

本文是 Python 系列教程第 2 篇&#xff0c;完整系列请查看 Python 专栏。 1 安装 官网下载地址https://www.jetbrains.com.cn/pycharm/&#xff0c;文件比较大&#xff08;约861MB&#xff09;请耐心等待 双击exe安装 安装成功后会有一个30天的试用期。。。本来想放鸡火教程&…

Nginx负载均衡请求队列配置:优化流量管理

在高流量的Web应用场景中&#xff0c;合理地管理进入的请求流量对于保持服务的稳定性和响应性至关重要。Nginx提供了请求队列的配置选项&#xff0c;允许开发者控制进入后端服务器的请求数量。通过配置请求队列&#xff0c;可以在后端服务器达到最大处理能力时&#xff0c;优雅…

005、架构_数据节点

​DN组件总览 ​ DN节点包含进程 dbagent进程:主要提供数据节点高可用、数据导入导出、数据备份恢复、事务一致性、运维类功能、集群的扩缩容、卸数等功能;MySQL进程:主要提供数据一致性、分组管理、快同步复制、高低水位等;

测试岗位应该学什么

以下是测试岗位需要学习的一些关键内容&#xff1a; 1. 测试理论和方法 - 了解不同类型的测试&#xff0c;如功能测试、性能测试、压力测试、安全测试、兼容性测试等。 - 掌握测试策略和测试计划的制定。 2. 编程语言 - 至少熟悉一种编程语言&#xff0c;如 Python、Java…

网络路由介绍,route指令,查询路由表的过程,默认路由

目录 路由 本地主机的路由功能 引入 route指令 查询路由表的过程 介绍 示例 默认路由 注意 路由 本地主机的路由功能 引入 报文经过多个路由器转发至公网,再从公网定位后转发至私网,最终到达目标主机 而报文肯定是要先经过本地主机的 所以本地主机也具有路由功能,也…

django网吧收费管理系统 项目源码26819

摘 要 随着互联网的普及&#xff0c;网吧作为公共互联网接入场所&#xff0c;依旧在许多地区发挥着重要作用。现代网吧不仅仅是提供上网服务的场所&#xff0c;还包括了游戏、社交、休闲等多功能体验。为了提高网吧的服务质量和运营效率&#xff0c;迫切需要一个高效的管理系统…

mysql基础语法——个人笔记

0 前言 以前学习且实践过mysql&#xff0c;但后来用得少&#xff0c;随着岁月更替&#xff0c;对其印象渐浅&#xff0c;所以每次需要用时&#xff0c;都会去再看一眼语法规范&#xff0c;然后才能放心动手操作 然而&#xff0c;在信息爆炸的时代&#xff0c;查语法规范时&am…

ubuntu录屏解决ubuntu下无法播放MP4格式文件的方法

参考 gnome gnome是系统自带的录屏&#xff0c;通过ctrlshiftaltr触发 保存到了视频目录下&#xff0c;webm格式文件。 screencastify 这是一个chrome扩展&#xff0c;&#xff0c;一般不推荐使用 recapp 比gnome自由一些&#xff0c;可以自由屏幕录制。但是无法修改录制…

如何将Dxf文件中的Vertex与相应的polyline关联起来

在处理DXF&#xff08;Drawing Exchange Format&#xff09;文件时&#xff0c;将VERTEX和相应的POLYLINE关联起来是一个常见的需求。这通常涉及解析DXF文件中的几何实体&#xff0c;并确保它们之间的关系正确。以下是一些步骤和示例代码&#xff0c;帮助你实现这种关联&#x…

如果学流式系统你想选一本书,那必须是这本

“如果你关心流式处理和批处理工作的正确性&#xff0c;那么这本书是必读的。它对该主题的讨论是我看到的思考最清晰、最合逻辑的&#xff0c;其思想也被精彩诠释。” ——马丁克莱普曼&#xff08;Martin Kleppmann&#xff09;&#xff0c;剑桥大学 流式系统 如今&#xff0c…

关于mysql的information_schema库表对象

MySQL的information_schema库是一个非常重要的系统数据库&#xff0c;它存储着关于MySQL服务器中所有其他数据库的元数据&#xff08;meta-data&#xff09;。元数据是指关于数据的数据&#xff0c;比如数据库名、表名、列名、数据类型、权限信息等&#xff0c;并不包含实际业务…