python - Python 中的运行时错误

标签 python mouseevent keypress pywin32 pyhook

我正在研究可以从 python 中的按键和鼠标事件获得的信息,一切似乎都正常,除了当我退出程序时出现此错误。

运行时错误 R6031 - 尝试多次初始化 CRT。这表明您的应用程序中存在错误。

这是我的代码,并不是只有当我按“q”并且程序退出时才会发生。

import pythoncom, pyHook, sys
def OnMouseEvent(event):
    # called when mouse events are received
    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 '---'
    return True

def OnKeyboardEvent(event):
    print "Message Name: ", 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 '---'
    if chr(event.Ascii) == 'q':
        sys.exit()
    return True

hm = pyHook.HookManager()
hm.KeyDown = OnKeyboardEvent
hm.MouseDown = OnMouseEvent
hm.HookKeyboard()
hm.HookMouse()
pythoncom.PumpMessages()

预先感谢您的帮助!

最佳答案

您必须“取消 Hook ”您创建的 Hook 才能正确退出。

终止“pythoncom.PumpMessages()”永久循环:

    if chr(event.Ascii) == 'q':
        ctypes.windll.user32.PostQuitMessage(0)

以下代码可以在使用 Python 2.7.6 的 Windows 7 上正常运行。 我还没有弄清楚如何让它在 Python 3.4 下工作,但当我知道时我会回来的!

import pythoncom, pyHook
import ctypes
import sys


def OnMouseEvent(event):
    # called when mouse events are received
    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('---')
    return True

def OnKeyboardEvent(event):
    print("Message Name: ", 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('---')
    if chr(event.Ascii) == 'q':
        ctypes.windll.user32.PostQuitMessage(0)
    return True


print("")
print('Python version:')                                            
print((sys.version))
print("")

hm = pyHook.HookManager()       # create a hook manager

hm.MouseAll = OnMouseEvent      # watch for all mouse events
hm.HookMouse()                  # set the hook

hm.KeyDown = OnKeyboardEvent    # watch for "OnKeyboardEvent"
hm.HookKeyboard()               # set the hook

pythoncom.PumpMessages()


# if you reached this point you have terminated the program correctly!
# flush and close any open files etc.

hm.UnhookMouse()
hm.UnhookKeyboard()

print("")
print("The end of Mouse and KBD test!")
print("")

关于python - Python 中的运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23727539/

相关文章:

jquery - 使用 jQuery 按向上或向下键跳转到上一个或下一个元素

javascript - 突出显示悬停元素的事件?

javascript - 在鼠标单击时选择一个与另一个透明 div 重叠的元素

javascript - (添加鼠标滚轮功能)使用 DOMmouseScroll 和鼠标滚轮调用函数

python - 并发访问RRD(RRDTool)

.net - 在 WPF 应用程序中 native 拦截按键操作的方法

javascript - 当按下一个键时多次按下不同的键?

python - 如何使用 statsmodels 和 Python 在 AR 模型中获取常数项?

python - 如何在 Python 中的多个异步进程之间进行同步?

python - 从元组列表中返回具有最小 y 值的元组