最近学习python中, 需要调用gui的wincom组件,网上搜罗了很多相关资料。但是大部分资料都有问题。也许跟python的开源和版本问题有关。
下面我就把网上罗列出来最多的捕捉键盘鼠标事件的代码做一下小小修改,可能对个别和我遇到相同问题的人有帮助。
先说明下我的python环境: 版本python2.7,win32扩展库 为2.7下的216版本,还有一个pyhook的扩展库。
引用的源代码:
# -*- coding: utf-8 -*-
#
# by oldj
# http://oldj.net/
#
import pythoncom
import win32gui
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()
win32gui.PumpMessages()if __name__ == "__main__":
main()
各位看官, 通过颜色区别可以看到问题了吧,没错,之前的代码是用pythoncom来调用pumpMessages()函数。
但是会报找不到的错误,通过win32自带的api我发现可以用win32gui去调用这个函数,作用是一样的。
多了不解释,大家自己试吧~