Python监听鼠标键盘事件

本文介绍如何利用pyhook库监听键盘和鼠标事件,以实现自动化测试游戏性能,包括实时记录ping值及特定卡顿点捕捉。通过安装pyWin32和pyhook库解决依赖问题,实现游戏测试过程的简化与效率提升。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.MessageName
13     print "Message:", event.Message
14     print "Time:", event.Time
15     print "Window:", event.Window
16     print "WindowName:", event.WindowName
17     print "Position:", event.Position
18     print "Wheel:", event.Wheel
19     print "Injected:", event.Injected
20     print "---"
21  
22  # 返回 True 以便将事件传给其它处理程序
23 # 注意,这儿如果返回 False ,则鼠标事件将被全部拦截
24  # 也就是说你的鼠标看起来会僵在那儿,似乎失去响应了
25     return True
26  
27 def onKeyboardEvent(event):
28 # 监听键盘事件
29     print "MessageName:", event.MessageName
30     print "Message:", event.Message
31     print "Time:", event.Time
32     print "Window:", event.Window
33     print "WindowName:", event.WindowName
34     print "Ascii:", event.Ascii, chr(event.Ascii)
35     print "Key:", event.Key    
36     print "KeyID:", event.KeyID
37     print "ScanCode:", event.ScanCode
38     print "Extended:", event.Extended
39     print "Injected:", event.Injected
40     print "Alt", event.Alt
41     print "Transition", event.Transition
42     print "---"
43 
44 # 同鼠标事件监听函数的返回值
45     return True
46  
47 def main():
48 # 创建一个“钩子”管理对象
49     hm = pyHook.HookManager()
50       
51 # 监听所有键盘事件
52     hm.KeyDown = onKeyboardEvent
53 # 设置键盘“钩子”
54     hm.HookKeyboard()
55 
56 # 监听所有鼠标事件
57     hm.MouseAll = onMouseEvent
58 # 设置鼠标“钩子”
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库的下载地址:http://sourceforge.net/projects/pywin32/files/

pyhook库的下载地址:http://sourceforge.net/projects/pyhook/files/

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值