转自:https://www.cnblogs.com/qiernonstop/p/3654021.html

用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),你还可以记录下来一天之中你在各个程序上花费了多少时间,看看自己有多少时间在看网页、多少时间在聊天、多少时间在真正地工作,呵呵。

50-用Python监听鼠标和键盘事件的更多相关文章

  1. 用Python监听鼠标和键盘事件

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

  2. python监听鼠标和键盘

    import PyHook3 def OnMouseEvent(event): print('MessageName:',event.MessageName) print('Message:',eve ...

  3. PC监听鼠标和键盘事件,定时无响应退出

    直接上代码: window.onload = function () { initScreenSaver(); } //0912 add function ScreenSaver(settings){ ...

  4. vue使用element-ui的el-input监听不了键盘事件解决

    vue使用element-ui的el-input监听不了键盘事件,原因应该是element-ui自身封装了一层div在input标签外面,把原来的事件隐藏了,所以如下代码运行是无响应的: <el ...

  5. 使用pynput同时监听鼠标和键盘

    pynput概述 pynput是一个基于python的,能够监听和控制鼠标和键盘的第三方库. pynput主要包括两个类,pynput.mouse和pynput.keyboard,顾名思义,前者可以用 ...

  6. Python自动化学习--鼠标和键盘事件

    from selenium import webdriver from selenium.webdriver import ActionChains import time driver = webd ...

  7. 关于如何用Jquery监听鼠标滚轮改变横向滚动条

    $(function(){ if ((navigator.userAgent.indexOf('MSIE') >= 0)){/*判断是否是IE浏览器*/ var scroll_width = 1 ...

  8. 使用python监听、模拟鼠标键盘事件

    最近守望职业选手疑似开挂事件挺热闹的,在下小菜一枚,并不能从视频中看出端倪.看了一些关于外挂的讨论,自动点射和压枪只需在鼠标驱动上做些改动即可,自瞄或其他高级功能则需要读内存或修改游戏文件,检测也更容 ...

  9. Python——pyHook监听鼠标键盘事件

    pyHook包为Windows中的全局鼠标和键盘事件提供回调. 底层C库报告的信息包括事件的时间,事件发生的窗口名称,事件的值,任何键盘修饰符等. 而正常工作需要pythoncom等操作系统的API的 ...

随机推荐

  1. fork exec source的区别

    参考:http://www.cnblogs.com/bkygg/p/5023072.html 1:fork  运行的时候开一个sub_shell 执行调用的脚本,sub_shell执行的时候,pare ...

  2. 2.4 Visio2007显示动态对齐网格

  3. Ubuntu 14.10 下安装Ambari 问题汇总

    在编译安装Ambari时候遇到了很多问题,现在记录一下 1 got error npm ERR! phantomjs@1.9.12 install while building ambari-web ...

  4. ubuntu16.04 安装最新版nodejs

    ubuntu软件仓库中自带的nodejs版本过低 $ apt-cache policy nodejs nodejs: Installed: (none) Candidate: 4.2.6~dfsg-1 ...

  5. 廖雪峰Java7处理日期和时间-4最佳实践-最佳实践

    jdk提供了2套新旧的API来处理日期和时间. java.util * Date * Calendar java.time(JDK>=1.8) * Localdate * LocalTime * ...

  6. django模型系统(三)

    1,自定义主键字段的创建 AutoFiled(pirmary_key=True)  # 一般不会自定义 2,order_by  asc  desc 表关系 OneToOne student = mod ...

  7. python:数据类型dict

    一.字典 key -->value 储存大量数据,而且是关系型数据,查询速度非常快 数据类型分类: 可变数据类型:list , dict, set 不可变的数据类型:int , bool, st ...

  8. 2th Dec 2018

    北京的冬天越来越冷了,是那种钻进骨头里的冷.果,爸爸又走了.每次离开都格外的难受,这种感觉是加剧的,一次比一次强烈.走的时候,你一脸的不高兴,能感觉出来你的不开心,你勉强让爷爷从我怀里面接过去.3个半 ...

  9. 使用Oracle DBLink进行数据库之间对象的访问操作

    Oracle中自带了DBLink功能,它的作用是将多个oracle数据库逻辑上看成一个数据库,也就是说在一个数据库中可以操作另一个数据库中的对象,例如我们新建了一个数据database1,我们需要操作 ...

  10. Vue2.0学习笔记

    环境搭建 vue-cli@3    vue-cli@2.X npm i -g @vue/cli 模板语法 文本 <span>Message: {{ msg }}</span> ...