2011-05-01 115 views
0

我想在Python中編寫一個自動更正機制。我記錄用戶的按鍵,當他們停止輸入一秒鐘時,我想刪除所有內容並重新輸入修正的句子。讓pyHook和SendKeys一起工作

下面的代碼工作正常,除了SendKeys運行速度非常慢。我認爲PumpMessages調用以某種方式干擾了它。有誰知道我該如何處理這個問題?

import threading 

import pyHook 
import pythoncom 
from SendKeys import SendKeys 

# Store typed keys. Correct words when stop typing for a bit. 
def info_handler(): 
    def event_info(e): 
    if e.MessageName == 'key down': 
     v.keys_pressed.append(e.Key) 
     if v.t: v.t.cancel() 
     v.t = threading.Timer(1, correct_words) 
     v.t.start() 
    return True 
    return event_info 

def correct_words(): 
    SendKeys('{BS %i}' % len(v.keys_pressed)) 

# Listen to keys. 
class v: 
    keys_pressed = [] 
    t = None 
hm = pyHook.HookManager() 
hm.KeyDown = info_handler() 
hm.HookKeyboard() 
pythoncom.PumpMessages() 
+1

FWIW,如果這是針對所有當前正在運行的應用程序(使用鉤子建議)運行的實用程序,則此方法聽起來像是可能有一些樂趣邊緣情況下弄清楚。例如;如果用戶在多行窗口中輸入,並使用例如。鍵入時方向鍵,您從此發送的任何退格可能會刪除錯誤的文本。或者,如果用戶在其鍵入時使用退格鍵,則最終可能會刪除太多的兩個字符。另外,在某些用戶界面中,如資源管理器,鍵入更改選擇;發送退格文件將會改變文件夾。 – BrendanMcK 2011-11-27 11:33:03

+0

是的。這實際上只是一個實驗,我最終放棄了這個實驗,因爲有太多煩人的邊緣案例,比如你提到的那些。 – 2011-11-28 02:49:24

回答

0

沒關係。我只需要在調用SendKeys之前調用hm.UnhookKeyboard()。

編輯:有人向我索取更多信息。我決定將我的關鍵相關實驗轉儲到GitHub上:https://github.com/JesseAldridge/Keyboard-Tricks

+0

等一下,說得太快......現在我解開鍵盤後不能重新鉤住鍵盤。 – 2011-05-01 23:02:17

+0

啊,那裏。在一個while循環中的PumpWaitingMessages可以做到這一點。 – 2011-05-01 23:20:51

+0

And ... PumpWaitingMessages正在最大限度地發揮我的CPU。精氨酸。 – 2011-05-06 21:39:21