2

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

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

4

2 回答 2

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

我希望它有帮助

于 2009-12-23T06:18:59.613 回答
0

我不太确定这个程序,但如果你把它放在exit();程序中间,它会完全退出程序。

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

于 2009-12-23T05:21:44.963 回答