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
[编辑]此外,该程序没有“失败”它只是冻结(该功能根本没有运行,它只是坐在那里)
答案 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();
吗?