当前位置: 首页 > news >正文

Python使用pynput模块后台监控鼠标及按键

        Pynput 是一个 Python 第三方库,它提供了监听和控制键盘和鼠标事件的功能。使用 pynput,我们可以编写自动化脚本,监控输入设备的活动,或者实现一些与键盘和鼠标相关的功能。

一、功能说明

        这段代码是运用pynput库实现对鼠标和键盘事件的监听和处理的一个完整示例,并在控制台中实时打印出相关事件的信息。

  1. 当你移动鼠标时,程序会捕获鼠标的移动事件,并在控制台打印出鼠标的当前位置,包括横坐标(x)和纵坐标(y)。
  2.  当你按下或释放鼠标的左键、右键或中键时,程序会捕获这些按键事件,并在控制台打印出按键的状态(按下或释放)以及鼠标当前的位置。
  3. 此外,当你按下或释放键盘上的任意按键时,程序同样会捕获这些键盘事件。对于能够打印出字符的按键(如字母、数字、标点符号等),程序会在控制台打印出该按键对应的字符表示;对于无法直接打印出字符的特殊按键(如功能键、控制键等),程序会打印出按键本身的信息。

from pynput import mouse, keyboard  def on_mouse_move(x, y):  print(f'鼠标移动到位置: ({x}, {y})')  def on_mouse_click(x, y, button, pressed):  if pressed:  print(f'{button} 按下于位置: ({x}, {y})')  else:  print(f'{button} 释放于位置: ({x}, {y})')  
def on_mouse_scroll(x, y, dx, dy):# dx 和 dy 表示滚动的水平方向和垂直方向的量  # 在大多数鼠标上,只有 dy 会变化,表示垂直滚动  print(f'Scrolled at {x}, {y} ({dx}, {dy})')  def on_key_press(key):  try:  print(f'{key.char} 被按下')  except AttributeError:  print(f'{key} 被按下')  def on_key_release(key):  try:  if key == keyboard.Key.esc:print('结束监听,退出!')keyboard_listener.stop()mouse_listener.stop()else :print(f'{key.char} 被释放')  except AttributeError:  print(f'{key} 被释放')  # 创建鼠标监听器  
mouse_listener = mouse.Listener(on_move=on_mouse_move, on_click=on_mouse_click,on_scroll=on_mouse_scroll)  
mouse_listener.start()  # 创建键盘监听器,同时监听按下和释放事件  
keyboard_listener = keyboard.Listener(on_press=on_key_press, on_release=on_key_release)  
keyboard_listener.start()  # 等待监听器运行,直到用户手动停止  
try:  mouse_listener.join()  keyboard_listener.join()  
except KeyboardInterrupt:  pass  # 捕获 Ctrl+C 来停止监听器  
finally:  # 停止监听器  mouse_listener.stop()  keyboard_listener.stop()

        它首先导入了 pynput库中的 mouse和 keyboard模块,这两个模块分别用于处理鼠标和键盘事件。

        在代码中,定义了几个回调函数,这些函数会在特定的事件发生时被调用。on_mouse_move函数用于处理鼠标移动事件,当鼠标在屏幕上移动时,它会打印出鼠标当前的位置坐标。on_mouse_click函数则处理鼠标点击事件,它会根据鼠标按键的状态(按下或释放)和点击位置打印相应的信息。on_mouse_scroll函数则处理鼠标滚动事件,它会打印出滚动发生的位置以及滚动的方向和距离。

        对于键盘事件,代码中定义了on_key_presson_key_release两个回调函数,分别处理按键按下和释放的事件。这些函数能够捕获按键的字符信息或者特殊按键的标识,并根据按键的类型打印出相应的信息。特别地,当检测到Esc键被按下时,程序会停止鼠标和键盘的监听,并退出运行。

        在定义了这些回调函数之后,代码创建了鼠标监听器和键盘监听器对象,并将这些回调函数作为参数传递给监听器。然后,通过调用监听器的start方法,程序开始监听鼠标和键盘事件。在监听器运行期间,程序会等待直到用户手动停止监听或者发生异常。当用户按下Ctrl+C时,程序会捕获到KeyboardInterrupt异常,并停止监听器运行。

        总体而言,这段代码充分展示了pynput库在处理输入设备事件方面的强大能力,它不仅可以捕获鼠标和键盘的基本操作,还可以对特殊按键和复杂事件进行处理。这对于开发需要与用户进行交互的应用程序来说,是一个非常有用的工具。这段代码适用于需要监控鼠标和键盘输入的应用场景,例如自动化测试、用户行为分析、游戏脚本等。注意,在实际应用中,可能需要处理更多的异常和边界情况,以确保程序的健壮性。

二、结构说明

1. 导入模块

        代码首先导入了pynput库中的mousekeyboard模块。这两个模块分别提供了对鼠标和键盘事件的监听和处理功能,为后续的代码实现提供了基础。

2. 定义回调函数

接着,代码定义了多个回调函数,用于处理各种鼠标和键盘事件。这些函数包括:

  • on_mouse_move:处理鼠标移动事件,打印鼠标当前位置。
  • on_mouse_click:处理鼠标点击事件,根据按钮状态和点击位置打印信息。
  • on_mouse_scroll:处理鼠标滚动事件,打印滚动位置和滚动量。
  • on_key_presson_key_release:分别处理键盘按键按下和释放事件,打印按键信息。这些回调函数是代码的核心部分,它们定义了当特定事件发生时应该执行的操作。
3. 创建监听器

        在定义了回调函数之后,代码创建了两个监听器对象:mouse_listenerkeyboard_listener。这两个监听器分别用于监听鼠标和键盘事件。在创建监听器时,将之前定义的回调函数作为参数传递给监听器,以便在事件发生时调用这些函数。

4. 启动监听器

        通过调用监听器的start方法,代码开始监听鼠标和键盘事件。此时,程序会进入等待状态,直到有事件发生或者用户手动停止监听。

5. 事件处理循环

        监听器启动后,代码进入了事件处理循环。在这个循环中,程序会持续监听并处理输入设备的事件,直到用户触发退出条件(如按下Esc键)。mouse_listener.join()keyboard_listener.join()确保了主线程会等待监听器线程完成后再继续执行。

6. 异常处理与退出机制

        代码中还包含了异常处理和退出机制。当用户按下Ctrl+C时,会触发KeyboardInterrupt异常,代码通过捕获这个异常来停止监听器并退出程序。此外,当检测到Esc键被按下时,也会通过调用监听器的stop方法来停止监听并退出。

相关文章:

Python使用pynput模块后台监控鼠标及按键

Pynput 是一个 Python 第三方库,它提供了监听和控制键盘和鼠标事件的功能。使用 pynput,我们可以编写自动化脚本,监控输入设备的活动,或者实现一些与键盘和鼠标相关的功能。 一、功能说明 这段代码是运用pynput库实现对鼠标和键盘…...

C语言 扫雷游戏

写了这么长时间的关于C语言的基础知识,相信大家已经学会了使用C语言书写一些基础的代码,上次还编写了三子棋游戏的代码,这次我将编写一个基础版的扫雷游戏。 首先,创建三个文件,两个源文件,一个头文件&…...

HTML学习:图片格式——超链接

一、图片格式 1.jpg格式 概述:扩展名为.jpg 或.jpeg ,是一种有损的压缩格式(把肉眼不容易观察出来的细节丢弃了)。 主要特点:支持的颜色丰富、占用空间较小、不支持透明背景、不支持动态图。 使用场景:对图片细节没有极高要求的场景,例如:网站的产品…...

工业级5g路由器使用案例(5g智慧安防解决方案)

​项目背景: 现代化智慧安防需要满足远程可视化监控、设备联网管理、数据加密传输等多重需求,对通信网络的带宽、时延、安全性等提出了很高要求。业内急需一款高可靠、高性能、易管理的通信网关设备,来确保安防系统的顺利运行。 安装部署: SR800-D路由器采用紧凑型全金属机箱…...

sentinel熔断降级

熔断降级 Slot 责任链上的最后一环:熔断降级 DegradeSlot,熔断降级作为保护系统的一种强大手段,可以根据慢调用、异常比例和异常数进行熔断,并自定义持续时间以实现系统保护 规则配置 规则类中属性解析 与控制面板对应 // 其中资源名称在 AbstractRule 里。 pu…...

Redis的安装和部署教程(Windows环境)

一、安装Redis服务 1、下载Redis压缩包 以下这个是我网盘里面的(这个是v8.0版本的,支持导入.rdb数据文件) 链接:百度网盘 请输入提取码 提取码:x0f1 --来自百度网盘超级会员V5的分享 2、解压到文件夹 将下载的压缩…...

MNN Session::resize 之流水线编码(五)

系列文章目录 MNN createFromBuffer(一) MNN createRuntime(二) MNN createSession 之 Schedule(三) MNN createSession 之创建流水线后端(四) MNN Session::resize 之流水线编码&am…...

2. IS-IS 基础实验

2.1 IS-IS 配置实验 2.1.1 实验介绍 2.1.1.1 学习目标 1. 实现 IS-IS 协议基本配置 2. 实现 IS-IS 协议 DIS 优先级修改 3. 实现 IS-IS 协议网络类型修改 4. 实现 IS-IS 协议外部路由引入 5. 实现 IS-IS 接口 cost 修改 6. 实现 IS-IS 路由渗透配置 2.1.1.2 实验组网介…...

Rust 并行库 crossbeam 的 Channel 示例

示例1 一个不完整的示例&#xff1a; let (tx, rx) channel::unbounded::<Task>(); let mut handlers vec![];for _ in 0..number {let rx rx.clone();let handle thread::spawn(move || {while let Some(task) rx.recv() {task.call_box();}});handlers.push(han…...

缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级的理解

一&#xff1a;缓存雪崩 我们可以简单的理解为&#xff1a;由于原有缓存失效&#xff0c;新缓存未到期间 (例如&#xff1a;我们设置缓存时采用了相同的过期时间&#xff0c;在同一时刻出现大面积的缓存过期)&#xff0c;所有原本应该访问缓存的请求都去查询数据库了&#xff…...

springcloud gateway

一、 predicate : 就是你定义一些规则&#xff0c;如果满足了这些规则&#xff0c;就去找到对应的路由。 对于strip 二、自定义过略器和全局过滤器 约定大于配置&#xff0c;后缀不变&#xff0c;只改前缀 sentinel持久化 三、sentinel quick-start | Sentinel 信号量虽然简…...

JAVA八股day1

遇到的问题 相比于包装类型&#xff08;对象类型&#xff09;&#xff0c; 基本数据类型占用的空间往往非常小为什么说是几乎所有对象实例都存在于堆中呢&#xff1f;静态变量和成员变量、成员变量和局部变量的区别为什么浮点数运算的时候会有精度丢失的风险&#xff1f;如何解…...

探索拓展坞的奥秘:提升电脑接口的无限可能

在数字化时代的浪潮中&#xff0c;电脑已成为我们日常生活和工作中不可或缺的一部分。然而&#xff0c;随着外接设备的日益增多&#xff0c;电脑接口的数量和类型往往无法满足我们的需求。这时&#xff0c;拓展坞便应运而生&#xff0c;以其强大的扩展能力和便捷的使用方式&…...

Linux中执行脚本报错(脚本乱码问题)

主要原因是在windows中编译文件格式导致 linux下解决&#xff1a; 方案一&#xff1a; Linux下打开shell文件&#xff0c;用vi/vim命令打开脚本文件&#xff0c;输入“:set fileformatunix”&#xff0c;回车&#xff0c;保存退出。 方案二&#xff1a; yum install -y dos2uni…...

el-table按钮获取当前行元素

el-table按钮获取当前行元素 vue2 <el-table-column label"操作" width"240px"><template slot-scope"scope"><el-button size"mini" click"toItem(scope.row)">用户详情</el-button><el-butto…...

MySQL数据导入的方式介绍

MySQL数据库中的数据导入是一个常见操作&#xff0c;它涉及将数据从外部源转移到MySQL数据库表中。在本教程中&#xff0c;我们将探讨几种常见的数据导入方式&#xff0c;包括它们的特点、使用场景以及简单的示例。 1. 命令行导入 使用MySQL命令行工具mysql是导入数据的…...

构建部署_Docker常用命令

构建部署_Docker常见命令 启动命令镜像命令容器命令 启动命令 启动docker&#xff1a;systemctl start docker 停止docker&#xff1a;systemctl stop docker 重启docker&#xff1a;systemctl restart docker 查看docker状态&#xff1a;systemctl status docker 开机启动&…...

Spring Boot Actuator介绍

大家在yaml中经常见到的这个配置 management: endpoints: web: exposure: #该配置线上需要去掉&#xff0c;会有未授权访问漏洞 include: "*" 他就是Actuator&#xff01; 一、什么是 Actuator Spring Boot Actuator 模块提供了生产级别…...

数据库中DQL、DML、DDL、DCL的概念与区别

目录 DQL (Data Query Language) DML (Data Manipulation Language) DDL (Data Definition Language) DCL (Data Control Language) 数据库语言可以根据其功能被分为几个不同的类别&#xff1a;DQL&#xff08;数据查询语言&#xff09;、DML&#xff08;数据操纵语言&…...

MacOS---设置Java环境变量

介绍 在MacOS系统配置Java环境变量。 操作步骤 第一步&#xff1a;打开.bash_profile文件 vim ~/.bash_profile第二步&#xff1a;添加或修改配置 如果是第一次配置需要添加配置如果是已经配置过想更换其他版本需要修改配置 在文件末尾添加或修改下面的配置 export JAVA…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

Ubuntu系统复制(U盘-电脑硬盘)

所需环境 电脑自带硬盘&#xff1a;1块 (1T) U盘1&#xff1a;Ubuntu系统引导盘&#xff08;用于“U盘2”复制到“电脑自带硬盘”&#xff09; U盘2&#xff1a;Ubuntu系统盘&#xff08;1T&#xff0c;用于被复制&#xff09; &#xff01;&#xff01;&#xff01;建议“电脑…...