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部分时,程序可以正常运行,因此发送键一定有问题。

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

我在Windows 7,python2.6上运行

[edit]此外,该程序不会“失败”,它只是冻结(该功能根本没有运行,它只是位于那儿)

最佳答案

似乎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部分放在不同的进程中,而不是放在不同的线程中?

希望对您有所帮助

关于python - 2在线程中运行后,SendKeys失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1950781/

10-12 18:26