我希望 pygame 设置自己的“沙箱”,这样就很难检测到来自其窗口外的输入。您之前的问题表明您也在使用该win32api模块。我们可以使用它来检测全局按键。
在全局范围内检测按键的正确方法是使用SetWindowsHookEx设置键盘挂钩。不幸的是,win32api 没有公开该方法,因此我们将不得不使用效率较低的方法。
GetKeyState方法可用于确定键是按下还是按下。您可以不断检查某个键的状态,以查看用户最近是否按下或释放了它。
import win32api
import time
def keyWasUnPressed():
    print "enabling joystick..."
    #enable joystick here
def keyWasPressed():
    print "disabling joystick..."
    #disable joystick here
def isKeyPressed(key):
    #"if the high-order bit is 1, the key is down; otherwise, it is up."
    return (win32api.GetKeyState(key) & (1 << 7)) != 0
key = ord('A')
wasKeyPressedTheLastTimeWeChecked = False
while True:
    keyIsPressed = isKeyPressed(key)
    if keyIsPressed and not wasKeyPressedTheLastTimeWeChecked:
        keyWasPressed()
    if not keyIsPressed and wasKeyPressedTheLastTimeWeChecked:
        keyWasUnPressed()
    wasKeyPressedTheLastTimeWeChecked = keyIsPressed
    time.sleep(0.01)
警告:与任何“while True sleep and then check”循环一样,此方法可能比等效的“设置回调并等待”方法使用更多的 CPU 周期。您可以延长sleep期间的长度来改善这一点,但关键检测将需要更长的时间。例如,如果您睡了整整一秒钟,那么在您按下一个键和操纵杆被禁用之间可能需要一秒钟的时间。