在线程中运行2次后,SendKeys失败

时间:2009-12-23 04:58:58

标签: python sendkeys

Python和SendKeys

import SendKeys, threading, pyHook, pythoncom
class Auto(threading.Thread):
    def run(self):
        SendKeys.SendKeys("{ENTER}",pause=0.1);
        print('Sent');
        exit();
def OnKeyboardEvent(event):
    if event.Ascii == 22:
        Auto().start();
    return True

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

由于某种原因,这个程序在运行两次之后就失败了,我不知道原因是什么。当您注释掉SendKeys部分时,程序运行正常,因此发送密钥必须存在问题。

[编辑]另外,为了澄清,在for i in range(0,100)中运行SendKeys.SendKeys(...)是有效的,所以我认为它与线程有关。我以前从未编写过线程。此外,这只是一个复制问题的模型示例。

我在Windows 7上运行,python2.6

[编辑]此外,该程序没有“失败”它只是冻结(该功能根本没有运行,它只是坐在那里)

2 个答案:

答案 0 :(得分:1)

似乎SendKeys是线程安全的。以下代码适用于Vista - Python 2.6

class Auto(threading.Thread):
    def run(self):
        SendKeys.SendKeys("#",pause=0.1);
        print('Sent');
        exit();

for i in xrange(30):
    Auto().start()

可能问题来自对PyHook或Windows PumpMessage机制的一些干扰。您是否尝试将SendKeys部分放在不同的进程中而不是放在不同的进程中?

我希望它有所帮助

答案 1 :(得分:0)

我对程序不太确定,但是如果你将exit();放在程序的中间,它将完全退出程序。

所以你可以试试exit();吗?