Python——pyHook监听鼠标键盘事件
pyHook包为Windows中的全局鼠标和键盘事件提供回调。
底层C库报告的信息包括事件的时间,事件发生的窗口名称,事件的值,任何键盘修饰符等。
而正常工作需要pythoncom等操作系统的API的支持。
先链上一篇《pyHook和pythoncom的安装》。
然后开始讲pyHook的使用。
关于pyHook的使用,网上现存的大多教程如下:
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("---")
# 返回 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()
结果如下:

但是,
其实我们都明白,
一个程序是不可能只有这一段代码的,
这最多只能算是一个线程。
那么,我们来把主函数改一下吧:
import _thread
if __name__ == "__main__":
try:
_thread.start_new_thread(main, ())
except:
print("Error")
while 1:
pass
这就变成了线程,输出结果依旧,但似乎卡了许多???而且很明显的是,监控鼠标&键盘事件很容易影响我们系统的正常运行,也就是容易卡顿,甚至会造成输出不全或者是按键失灵等问题。
这就不好玩了。
毕竟我也只是想监测鼠标有没有动而已。
所以最简单的办法就是——
把你不需要的功能输出统统删掉,就不卡了。
至于这东西有什么用呢~~~
那就厉害咯。
你可以记录并画出自己的鼠标轨迹;或者是记录一天各按键的次数,并进行排序;当然,如果你比较皮,你还可以锁住别人的鼠标键盘(只需返回值为None);甚至是记录下别人一天在哪些程序花费了多少时间,看什么网页啊,八小时上班七小时水群啊,毕竟你是可以获取当前窗口标题的(WindowName)。
嘘~~~
Python——pyHook监听鼠标键盘事件的更多相关文章
- js进阶 12-6 监听鼠标滚动事件和窗口改变事件怎么写
js进阶 12-6 监听鼠标滚动事件和窗口改变事件怎么写 一.总结 一句话总结:滚动事件scroll(),浏览器窗口调整监听resize(),思考好监听对象. 1.滚动事件scroll()的监听对象是 ...
- Flex 自动获取焦点 监听全局键盘事件
在mxml里监听addedToStage事件 protected function application1_addedToStageHandler(event:Event):void { this. ...
- js 监听组合键盘事件
有些时候,我们需要在网页上,增加一些快捷按键,方便用户使用一些常用的操作,比如:保存,撤销,复制.粘贴等等. 我们所熟悉的按键有这么集中类型: 单独的按键操作,如:delete.up.down等 两位 ...
- html监听,键盘事件
<script type="text/javascript" language=JavaScript charset="UTF-8"> v ...
- 用Python监听鼠标和键盘事件
PyHook是一个基于Python的“钩子”库,主要用于监听当前电脑上鼠标和键盘的事件.这个库依赖于另一个Python库PyWin32,如同名字所显示的,PyWin32只能运行在Windows平台,所 ...
- 50-用Python监听鼠标和键盘事件
转自:https://www.cnblogs.com/qiernonstop/p/3654021.html 用Python监听鼠标和键盘事件 PyHook是一个基于Python的“钩子”库,主要用于监 ...
- python hook监听事件
python hook监听事件 作者:vpoet mail:vpoet_sir@163.com # -*- coding: utf-8 -*- # # by oldj http://oldj.net/ ...
- pyHook监听用户鼠标、键盘事件
一.代码部分:获取用户输入信息,并与截图一起保存到XX目录下 # -*- coding: utf-8 -*- # import pythoncom import pyHook impor ...
- 使用python监听、模拟鼠标键盘事件
最近守望职业选手疑似开挂事件挺热闹的,在下小菜一枚,并不能从视频中看出端倪.看了一些关于外挂的讨论,自动点射和压枪只需在鼠标驱动上做些改动即可,自瞄或其他高级功能则需要读内存或修改游戏文件,检测也更容 ...
随机推荐
- Java核心技术及面试指南 线性表方面的面试题总结以及答案
3.2.7.1 请用ArrayList实现Stack以及Queue的功能. public class ArrayListStack extends ArrayList implements Stack ...
- 如何使用Keras的Model visualization功能
问题 安装上graphviz和pydot之后调用出现如下问题 ['dot', '-Tpng', '/tmp/tmp1KPaiV'] return code: 1 stdout, stderr: War ...
- 使用ANNdotNET进行情感分析
2018年10月的MSDN杂志上发表了由James McCaffrey撰写的文章“使用CNTK的情感分析” .在这篇博文中,我将向您介绍这篇非常好且写得很好的MSDN文章示例.我不打算重复MSDN文章 ...
- sql server 锁与事务拨云见日(上)
一.概述 讲到sql server锁管理时,感觉它是一个大话题,因为它不但重要而且涉及的知识点很多,重点在于要掌握高并发要先要掌握锁与事务,涉及的知识点多它包括各式各样的锁,锁的组合,锁的排斥,锁延伸 ...
- Spring Aop分析
前言 上文讲述ioc框架的实现,本文开始讲述aop.在spring中aop也有3种配置方式,注解形式的我们先不讨论.我们先看看xml形式的配置方式. <aop:config> <ao ...
- Java中的Interrupt使用
初心 用interrupt中断程序 初步实现 public class InterruptionInJava implements Runnable{ @Override public void ru ...
- 网络协议抓包分析——ARP地址解析协议
前言 计算机之间可以相互通信的前提是要知道对方的地址,才可以发送信息给其他计算机,就像别人要联系你也得先知道你的电话号码一样.这里的地址因为网络分层的原因就包括IP地址和MAC地址(即网卡地址.硬件地 ...
- Perl构建和打包自己的模块
当写好一个或多个模块后,可以将它构建.打包成"tar.gz",以便让别人安装或者上传到CPAN(如果愿意的话).对于模块的使用者来说,也不用再使用use lib 'LIB_PATH ...
- Redis主从复制、多实例、高可用(三)--技术流ken
Redis主从复制 在开始实现redis的高可用之前,首先来学习一下如何实现redis的主从复制,毕竟高可用也会依赖主从复制的技术. Redis的主从复制,可以实现一个主节点master可以有多个从节 ...
- 写一个ORM框架的第一步(Apache Commons DbUtils)
新一次的内部提升开始了,如果您想写一个框架从Apache Commons DbUtils开始学习是一种不错的选择,我们先学习应用这个小“框架”再把源代码理解,然后写一个属于自己的ORM框架不是梦. 一 ...