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/