在窗口未激活时断开循环

时间:2017-05-20 15:57:22

标签: python keyboard keyboard-hook

我有一个使用鼠标点击的脚本,因此控制台窗口不活动。因此,如果我想终止循环,我不能简单地使用Ctrl-C来键盘中断它。

如果按下某个键,如何在循环中加入一个检查来打破它?例如,我想要一些形式:

while True:
    if key_pressed.ascii() == 27: #escape is pressed
        break
    print('foo')

我尝试过使用msvcrt但它只在窗口处于活动状态时才有效。我尝试过使用pyHook但无法在循环中使用它。

修改 这是一个几乎按照我希望的方式工作的例子。但是它在完成运行后不会正常退出(即使使用sys.exit()),而且当在我的实际代码中实现时,pygame.event.pump()调用似乎搞乱了循环代码。我在这里做错了什么?

import pyHook, pygame, sys

def OnKeyboardEvent(event):
    if event.Ascii==27:
        global shouldBreak
        shouldBreak=True

hm = pyHook.HookManager()
hm.KeyDown = OnKeyboardEvent
hm.HookKeyboard()
shouldBreak=False

pygame.init()
while True:
    pygame.event.pump()
    if shouldBreak:
        break
    #loop code
    print('foo')

#post loop code    
print('bar')
sys.exit()

0 个答案:

没有答案