当前位置: 首页 > >

用Python监听鼠标和键盘事件(转载)

发布时间:

用Python监听鼠标和键盘事件(转载)




作者: oldj | 链接:
http://oldj.net/article/python-hook/






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


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


?









?1?
#
?-*-?coding:?utf-8?-*-?#?


?2?
#
?by?oldj?http://oldj.net/?#??


?3

import?pythoncom


?4
import?pyHook ???


?5
def?onMouseEvent(event):?


?6?????


?7???
#
?监听鼠标事件?????


?8?
??
print?
"
MessageName:
",event.MessageName?????


?9???
print?
"
Message:
",?event.Message?????


10???
print?
"
Time:
",?event.Time?????


11???
print?
"
Window:
",?event.Window?????


12???
print?
"
WindowName:
",?event.WindowName?????


13???
print?
"
Position:
",?event.Position?????


14???
print?
"
Wheel:
",?event.Wheel?????


15???
print?
"
Injected:
",?event.Injected???????????


16???
print
"
---
"


17???


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


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


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


21?
??
return?True


22??


23
def?onKeyboardEvent(event):


24??
#
?监听键盘事件?????


25?
??
print?
"
MessageName:
",?event.MessageName?????


26???
print?
"
Message:
",?event.Message?????


27???
print?
"
Time:
",?event.Time?????


28???
print?
"
Window:
",?event.Window?????


29???
print?
"
WindowName:
",?event.WindowName?????


30???
print?
"
Ascii:
",?event.Ascii,?chr(event.Ascii)?????


31???
print?
"
Key:
",?event.Key?????


32???
print?
"
KeyID:
",?event.KeyID?????


33???
print?
"
ScanCode:
",?event.ScanCode?????


34???
print?
"
Extended:
",?event.Extended?????


35???
print?
"
Injected:
",?event.Injected?????


36???
print?
"
Alt
",?event.Alt?????


37???
print?
"
Transition
",?event.Transition?????


38???
print?
"
---
"??????


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


40?
??
return?True?


41?


42
def?main():?????


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


44?
?? hm?=?pyHook.HookManager()??????


45???
#
?监听所有键盘事件?????


46?
?? hm.KeyDown?=?onKeyboardEvent?????


47???
#
?设置键盘“钩子”?????


48?
?? hm.HookKeyboard()??????


49???
#
?监听所有鼠标事件?????


50?
?? hm.MouseAll?=?onMouseEvent?????


51???
#
?设置鼠标“钩子”?????


52?
?? hm.HookMouse()??????


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


54?
?? pythoncom.PumpMessages()?


55?


56
if?
__name__?==?
"
__main__
":?????


57??? main()

?







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


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


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



友情链接: