python获取键盘事件_50-用Python监听鼠标和键盘事件

PyHook是一个基于Python的“钩子”库,主要用于监听当前电脑上鼠标和键盘的事件。这个库依赖于另一个Python库PyWin32,如同名字所显示的,PyWin32只能运行在Windows平台,所以PyHook也只能运行在Windows平台。

关于PyHook的使用,在它的官方主页上就有一个简单的教程,大体上来说,可以这样使用:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# @Time : 2019/3/10 15:48

# @Author : ystraw

# @Site :

# @File : t3.py

# @Software: PyCharm Community Edition

# @function:

# -*- coding: utf-8 -*-

#

# by oldj

# http://oldj.net/

#

import pythoncom

import pyHook

def onMouseEvent(event):

# 监听鼠标事件

# print ("MessageName:", event.MessageName)

# print ("Message:", event.Message)

# print ("Time:", event.Time)

# print ("Window:", event.Window)

# print ("WindowName:", event.WindowName)

# print ("Position:", event.Position)

# print ("Wheel:", event.Wheel)

# print ("Injected:", event.Injected)

# print ("---")

# if event.MessageName == 'mouse left down':

# print('点击了左键')

if event.Message == 514:

print('点击左键一次')

# 返回 True 以便将事件传给其它处理程序

# 注意,这儿如果返回 False ,则鼠标事件将被全部拦截

# 也就是说你的鼠标看起来会僵在那儿,似乎失去响应了

return True

def onKeyboardEvent(event):

# 监听键盘事件

# print "MessageName:", event.MessageName

# print "Message:", event.Message

# print "Time:", event.Time

# print "Window:", event.Window

# print "WindowName:", event.WindowName

# print "Ascii:", event.Ascii, chr(event.Ascii)

# print "Key:", event.Key

# print "KeyID:", event.KeyID

# print "ScanCode:", event.ScanCode

# print "Extended:", event.Extended

# print "Injected:", event.Injected

# print "Alt", event.Alt

# print "Transition", event.Transition

# print "---"

# 同鼠标事件监听函数的返回值

return True

def main():

# 创建一个“钩子”管理对象

hm = pyHook.HookManager()

# 监听所有键盘事件

# hm.KeyDown = onKeyboardEvent

# 设置键盘“钩子”

# hm.HookKeyboard()

# 监听所有鼠标事件

hm.MouseAll = onMouseEvent

# 设置鼠标“钩子”

hm.HookMouse()

# 进入循环,如不手动关闭,程序将一直处于监听状态

pythoncom.PumpMessages()

if __name__ == "__main__":

main()

运行上面的脚本,试试看移动一下鼠标,或者按一下键盘(比如开一个记事本程序,随便写点东西),看看这个脚本输出了什么。你会发现,你的鼠标、键盘的每一个动作都被它捕捉到并打印出来了。

另外,需要注意上面两个监听函数的返回值。这两个函数可以没有返回值(实际上返回的是 None),如果有返回值的话,如果返回值为 True,则这个脚本在捕捉、处理对应的事件后会把事件继续传递下去,如果返回值为 False,则事件将会被阻塞在这儿,具体来说,就是你的鼠标或键盘将不再有响应。

有了 PyHook,我们可以做很多有趣的事情:比如记录一下自己一天鼠标的轨迹,再结合别的程序画一张图出来;或者记录一下你每天的按键记录,看看键盘上哪些键你按得最多;如果你很坏,还可以把它悄悄地装在别人的电脑中,看一看那个人一天都做了些什么;当然,由于 PyHook 还可以取得当前窗口的标题(WindowName),你还可以记录下来一天之中你在各个程序上花费了多少时间,看看自己有多少时间在看网页、多少时间在聊天、多少时间在真正地工作,呵呵。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/292555.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解读最新的 Xamarin 更新

微软中国MSDN 点击上方蓝字关注我们Good news——Visual Studio 2022 包括了 Xamarin 对 Android 12和苹果最新的 Xcode 13 版本下的 iOS、iPadOS、macOS 和 tvOS 的支持,以及适用于支持它们的最新 Xamarin.Forms 版本。让我们一起来了解下最新 Xamarin版本&#x…

原来医生的处方不是随便乱写的...

1 奇奇怪怪的知识又增加了(素材来源网络,侵删)▼2 像极了早上刚睡醒炸毛的你▼3 原来医生的处方不是瞎写的▼4 当爷爷不当孙子(素材来源网络,侵删)▼5 40厘米的身高差(素材来源网络&#xf…

Uva 11400,照明系统设计

题目链接:https://uva.onlinejudge.org/external/114/11400.pdf 题意:有一个照明系统需要用到n种灯,每种灯的电压为V,电源费用K,每个灯泡费用为C,需要该灯的数量为L。注意到,电压相同的灯泡只需…

Android之解决Gigaset手机不能设置DeviceOwner权限提示already provisioned问题

客户那里有Gigaset手机,安装我们的产品需要注入DeviceOwner,但是刚恢复默认出厂的Gigaset手机很奇葩,注入权限的提示下面错误,导致不能使用我们的产品 设置DeviceOwner权限是有限制的,需要手机账号(acount)为0 1 我们用命令查看手机的帐号 adb shell dumpsys account …

Python-理解装饰器

文章先由stackoverflow上面的一个问题引起吧&#xff0c;如果使用如下的代码&#xff1a; makebold makeitalic def say():return "Hello" 打印出如下的输出&#xff1a; <b><i>Hello<i></b> 你会怎么做&#xff1f;最后给出的答案是&#x…

收集网络状态(Ping),并用邮件通知管理员

在没有第三方工具对网络进行监控的话&#xff0c;要检查网络中某台主机&#xff0c;或是某个IP地址通讯是否正常&#xff0c;我们通常用手动PING来进行测试。有了PowerShell&#xff0c;我们可以用他定时Ping网络上的几个IP地址&#xff0c;然后把ping的个延时时间用邮件通知给…

sql 某列数据全部为0则不显示该列_数据产品经理养成记(五):汇总分析

学会了如何查找数据后&#xff0c;接下来就要对数据进行分析处理&#xff0c;比如求和、平均值、加总等等。这些对数据的加工处理通过汇总函数来实现。汇总函数在之前的两篇文章中都有涉及&#xff0c;这里采用概念--案例--总结的方式&#xff0c;集中介绍一下。1.什么是汇总函…

如何通过 反射 调用某个对象的私有方法?

咨询区 Jeromy Irvine我的类中有一组私有方法&#xff0c;我现在想根据灵活的输入值来动态调用其中的私有方法&#xff0c;代码类似是这个样子。MethodInfo dynMethod this.GetType().GetMethod("Draw_" itemType); dynMethod.Invoke(this, new object[] { methodP…

vim学习日志(5):vim下wimrc的配置,解决中文乱码问题

解决linux下vim乱码的情况&#xff1a;(修改vimrc的内容&#xff09; 全局的情况下&#xff1a;即所有用户都能用这个配置 文件地址&#xff1a;/etc/vimrc 在文件中添加&#xff1a; set fileencodingsutf-8,ucs-bom,gb18030,gbk,gb2312,cp936 set termencodingutf-8 set enco…

Android插件化开发之AMS与应用程序(客户端ActivityThread、Instrumentation、Activity)通信模型分析

转载来自&#xff1a;http://blog.csdn.net/qinjuning/article/details/7262769 今天主要分析下ActivityManagerService(服务端) 与应用程序(客户端)之间的通信模型&#xff0c;在介绍这个通信模型的基础上&#xff0c;再 简单介绍实现这个模型所需要数据类型。 本文所介绍内容…

深入了解JavaScript中的正则表达式构造函数和正则表达式字面量

正则表达式是在处理字符串时非常有用的工具&#xff0c;它可以帮助我们进行模式匹配、搜索和替换操作。在JavaScript中&#xff0c;我们可以使用正则表达式构造函数 RegExp 或正则表达式字面量来创建正则表达式对象。本文将深入探讨这两种方式的不同之处&#xff0c;并通过代码…

iOS开发UI篇—直接使用UITableView Controller

iOS开发UI篇—直接使用UITableView Controller 一、一般过程 1 //2 // YYViewController.h3 // UITableView Controller4 //5 // Created by 孔医己 on 14-6-2.6 // Copyright (c) 2014年 itcast. All rights reserved.7 //8 9 #import <UIKit/UIKit.h> 10 11 inter…

怎么做图片文字二维码一起_怎么做?才能让文字编排更出彩

在之前视觉设计文章中&#xff0c;我把视觉设计大致罗列了四个方向&#xff0c;更多的是希望能够为大家带来一些努力方向&#xff0c;在设计的路上不那么困惑迷茫&#xff0c;视觉设计本身涵盖的范围就比较广&#xff0c;同时也没有什么衡量的标准和具体的特征&#xff0c;只有…

×××

的规则如下&#xff1a;任意的5张牌&#xff0c;只要其中的三张能凑满10的整数倍&#xff0c;就算有牛&#xff0c;否则没牛。在有牛的前提下&#xff0c;另外两张牌相加取个位数上的数字&#xff0c;数字是几就是牛几。且数字越大的一方胜。碰到数字相当的情况下&#xff0c;就…

.NET6之MiniAPI(八):日志

说明&#xff1a;本篇简单说一下日志中常用的几个点&#xff0c;关于日志&#xff0c;后面重点会说到三方日志提供程序在MiniAPI中&#xff0c;可以通过方法或构造函数中&#xff0c;获取框架自动注入的日志类型&#xff0c;如下方式&#xff1a;app.MapGet("/test",…

为什么你闻不到自己胳肢窝的味道?

▲ 点击查看生活中&#xff0c;我们常常会选择性地忽略一些事。吃螺蛳粉的人不会觉得屋子臭&#xff0c;而别人身上有一点烟味就可以闻到。公司的厕所&#xff0c;别人用完后&#xff0c;总觉得比自己用完时更臭。夏天胳肢窝出汗的味道&#xff0c;自己从来都闻不到&#xff0c…

Android插件化开发之Hook StartActivity方法

第一步、先爆项目demo照片&#xff0c;代码不多&#xff0c;不要怕 第二步、应该知道Java反射相关知识 如果不知道或者忘记的小伙伴请猛搓这里&#xff0c;Android插件化开发基础之Java反射机制研究 http://blog.csdn.net/u011068702/article/details/49863931第三步、应该知道…

ArcGis融合小多边形到相邻多边形

&#xfeff;&#xfeff;在有的时候&#xff0c;我们的数据中可能会有许多细小的图斑&#xff0c;这些并不是我们想要的&#xff0c;需要将它们合并到周围的图斑中&#xff0c;如果一个一个手动合并&#xff0c;那工作量之大简直不敢想象。现在借助ArcGIS的Eliminate工具可以很…

如何部署同一个Spring boot web 应用到不同的环境

在现实项目当中我们往往都有不同的部署环境&#xff0c;例如&#xff1a;dev数据库, system test 数据库 和production 数据库&#xff0c; 那么如何把同一个spring boot web app 部署到不同的数据库环境呢&#xff1f;spring boot 提供一个profile的功能&#xff0c; 通过配置…