2012-12-13 30 views
4

我正在研究一个脚本,它抓住我的鼠标控制并在简单的无限while循环内运行。全局热键来停止窗口脚本

def main(): 
    while True: 
     do_mouse_stuff() 

由于鼠标控制的,它的点击蟒蛇窗口,然后按Ctrl-C痛,所以我一直在寻找一种方式来实现Windows中的全局热键。我也是一个相对的Python noob,所以我可能错过了一个明显的答案。我找到的东西:

pyhk - 最近我得到了,但这个模块做了一些令人讨厌的事情我的电脑出于某种原因(可能是我做错了什么),它引入了主要的鼠标滞后,完整的输入锁定,各种我不够聪明的东西来处理。

pyHook - 跟着tutorial,工作正常,但无限的运行消息泵和我的while循环似乎独家运行,我还没有想出如何使其工作。

Another Method - 我也发现了这个方法,但是我有和pyHook一样的问题,try循环和我的while循环不能共存。

我试图弄清楚如何将我的循环集成到这些示例中,而不是维护一个单独的循环,但我一直无法完成这项工作,可能是由于我的noobishness。有人能够让我知道如何完成这项工作吗?

+0

如果你想自己实现一个消息循环,它必须是唯一的,并且只能有一个,它可以分派所有的事件,不管它们来自键盘,鼠标还是无论哪个。这就是为什么pyHook似乎不适合你。 – Hyperboreus

+0

这正是问题所在,我不知道如何使它成为一个循环,因为messagePump和Try循环似乎排除了我尝试添加到它们的任何内容。只要我的代码正常工作,全局热键将不起作用,只要全局热键工作,脚本就会在那里等待热键而不是执行我的功能。 – Mark

+0

为什么不使用已有工作消息队列的东西,例如一个qt应用程序。 – Hyperboreus

回答

-1

也许使用msvcrt?我不知道这是否是“全球性”,而现在我无法测试它,很遗憾,但这里的检测Escape键(从this question拍摄),集成与您的键盘东西为例:

import msvcrt 

def main(): 
    while True: 
     do_mouse_stuff() 

     # Check if `Esc` has been pressed 
     if msvcrt.kbhit() and msvcrt.getch() == chr(27).encode(): 
      aborted = True 
      break 
+0

我无法使msvcrt工作,我环顾四周寻找更多的例子,看起来你在实施中感到震惊,但它不适用于任何在我的系统上的原因。阅读[this](http://effbot.org/librarybook/msvcrt.htm),尝试[this](http://effbot.org/librarybook/msvcrt-example-1.py),但我所有的输出是ÿ而且从来没有我按下的键。 – Mark

+1

@ user1900018:经过一些更多的实验后,似乎'msvcrt'不处理全局按键。使用示例代码,只有在运行Python的窗口具有焦点时,才能成功触发'Esc'循环。 – voithos