2011-05-01 71 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