Сбой SendKeys после двух запусков в потоке - PullRequest
2 голосов
/ 23 декабря 2009

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] Также, чтобы уточнить, работает SendKeys.SendKeys (...) в for для i в диапазоне (0,100), поэтому я предполагаю, что это как-то связано с потоком. Я никогда не программировал темы раньше. Кроме того, это всего лишь пример макета для воспроизведения проблемы.

Я работаю на Windows 7, python2.6

[edit] Кроме того, программа не «выходит из строя», она просто зависает (функция вообще не запускается, она просто сидит там)

Ответы [ 2 ]

1 голос
/ 23 декабря 2009

Похоже, что 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 в другой процесс, а не в другой поток?

Надеюсь, это поможет

0 голосов
/ 23 декабря 2009

Я не уверен с программой, но если вы поставите exit(); в середине программы, она полностью закроется.

Так не могли бы вы попробовать без exit();?

...