博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python监听鼠标键盘事件
阅读量:6369 次
发布时间:2019-06-23

本文共 2451 字,大约阅读时间需要 8 分钟。

View Code
1  #-*- coding: utf-8 -*- 2 # 3 # by oldj 4 # http://oldj.net/ 5 # 6   7 import pythoncom 8 import pyHook 9      10 def onMouseEvent(event):11 # 监听鼠标事件12     print "MessageName:", event.MessageName13     print "Message:", event.Message14     print "Time:", event.Time15     print "Window:", event.Window16     print "WindowName:", event.WindowName17     print "Position:", event.Position18     print "Wheel:", event.Wheel19     print "Injected:", event.Injected20     print "---"21  22  # 返回 True 以便将事件传给其它处理程序23 # 注意,这儿如果返回 False ,则鼠标事件将被全部拦截24  # 也就是说你的鼠标看起来会僵在那儿,似乎失去响应了25     return True26  27 def onKeyboardEvent(event):28 # 监听键盘事件29     print "MessageName:", event.MessageName30     print "Message:", event.Message31     print "Time:", event.Time32     print "Window:", event.Window33     print "WindowName:", event.WindowName34     print "Ascii:", event.Ascii, chr(event.Ascii)35     print "Key:", event.Key    36     print "KeyID:", event.KeyID37     print "ScanCode:", event.ScanCode38     print "Extended:", event.Extended39     print "Injected:", event.Injected40     print "Alt", event.Alt41     print "Transition", event.Transition42     print "---"43 44 # 同鼠标事件监听函数的返回值45     return True46  47 def main():48 # 创建一个“钩子”管理对象49     hm = pyHook.HookManager()50       51 # 监听所有键盘事件52     hm.KeyDown = onKeyboardEvent53 # 设置键盘“钩子”54     hm.HookKeyboard()55 56 # 监听所有鼠标事件57     hm.MouseAll = onMouseEvent58 # 设置鼠标“钩子”59     hm.HookMouse()60  61 # 进入循环,如不手动关闭,程序将一直处于监听状态62     pythoncom.PumpMessages()63       64 if __name__ == "__main__":65     main()

  为了满足工具的需求,在脚本里面写了两个线程,一个线程用来发ping包,处理ping的结果数据,而另一个则是实时监控键盘的输入,一旦键盘在当前窗口输入任意字符串,则停止程序,不再发ping包,也不再记录数据,从而记录所有已记录的ping数据的总值,次数以及平均值,之前是满足需求的,但是思考之后,每次在游戏开始的时候,要切换窗口,然后执行程序,想要停止程序的时候,又要切换窗口出去,在程序窗口输入任意值,停止程序,确实很不方便,而且在Win7下,由于兼容性的问题,CF不能窗口化,全屏切换出去又比较卡,经常游戏会未响应,并且需求是要在测试CF游戏的时候,不仅仅是记录实时的ping值,更需要在某个特定的用户觉得卡的那个点,通过某种方式进行捕捉,这就需要监控到键盘的消息,而不是仅仅只是监控当前窗口的输入之类的。

  在网上查找资料的时候,找到了一个很好的方法,pyhook这个库,并且还提供了相当封装好的方法,直接调用便可拿到你键盘,或者是鼠标的输入,“钩子”的方式着实是非常强大的,贴上代码,这段代码仅仅只是网上的一段引用,测试过确实是可行的,但是中间存在一点小插曲

  本机安装的是python 2.7的版本,应该属于比较大众的版本,但是这个版本安装了并不会立即就支持pyhook这个库,应该说,没有集成pyhook这个库,这个库是基于另一个库pywin32的,可能是考虑这两个库的平台局限性,只能在windows上使用,所以才没有直接集成到python的安装中

  最开始没有考虑到这个库不存在,因为这段代码执行的时候,报的错误是没有“pythoncom”这个库,在网上搜了很久,发现没有任何的关于这个的解决,但是com明显是基于win32的,所以抱着试一试的心态,我决定先把pywin32这个库给安装了,然后pyhook库也安装了,果然,安装之后就全部OK了。

pyWin32库的下载地址:

pyhook库的下载地址:

转载于:https://www.cnblogs.com/lichan/archive/2012/11/28/2792537.html

你可能感兴趣的文章
github获得SSH Key解决Permission denied (publickey)问题
查看>>
用java代码编写Oracle存储过程
查看>>
APACHE转发
查看>>
android-market-api
查看>>
解決 yum update錯誤:[Errno -1] Metadata file does not match checksum
查看>>
ASP.NET(C#)Excel导入Dataset的出现数据值丢失问题
查看>>
我的友情链接
查看>>
『Data Science』R语言学习笔记,获取数据
查看>>
rails中n秒页面自动跳转
查看>>
我的友情链接
查看>>
忘记root用户密码怎么办?
查看>>
esxi定时任务
查看>>
Scaffold-DbContext
查看>>
关于VMware Workstation主机列表问题求教
查看>>
配置管理小报101021:给ubuntu加监控
查看>>
qml文字滚动效果的封装,实现方式运用的qml中提供的动画效果,另一种实现方式也可以使用定时器修改控件的坐标来实现...
查看>>
标准C++实现任务队列
查看>>
jdbc url
查看>>
刷leetcode第704题-二分查找
查看>>
debug_backtrace() 函数生成一个 backtrace(追踪)
查看>>