侦听特定键的全局键按下

时间:2019-02-25 21:35:06

标签: python winapi pygame overlay

使用Pygame,我目前有这个循环:

def quest_loop():
    i = 0
    while i < len(quests):
        event = pygame.event.wait()
        if event.type == KEYDOWN and event.key == K_F4:
            screen.fill(BLACK)
            message_display(*normal_message, quests[i], wrap_text)
            i += 1
            pygame.event.clear()

我为游戏创建了一个小的覆盖层,该覆盖层遍历了我在代码中先前生成的数组。

这很好用,但仅当我选择了pygame窗口时。我想让它监听特定的F4按键,即使未选择它。我尝试使用win32api模块,但没有获得很大的成功。当我设法使代码正常工作时,有许多我无法解决的问题。

谢谢您的帮助。

更新:

我再次查看了win32api,并设法纠正了我遇到的一个重复性问题(按一次该键将多次遍历我的列表)。这段代码可以解决此问题:

`def key_press():
    global was_pressed
    if was_pressed == False and quest_forward() == True:
        was_pressed = True
        return True
    if was_pressed == True and quest_forward() == True:
        return False
    if was_pressed == True and quest_forward() == False:
        was_pressed = False
        return False`

我要处理的下一个问题是除非pygame窗口具有焦点,否则无法识别输入。叠加层的当前状态并非完全不可行,只是有些烦人。我已经看过pyHook,但似乎无法在我的代码中插入pythoncom.PumpMessages()并使其正常工作。

编辑:尝试了多种不同的操作后,似乎在尝试维护pygame窗口时事件处理程序无法运行,我继续尝试使用wxPython和win32api。

0 个答案:

没有答案