如何使用Python检测视频游戏中的击键?

如何使用Python检测视频游戏中的击键?,python,python-3.x,windows,keystroke,Python,Python 3.x,Windows,Keystroke,我正在尝试开发一个程序,每当我在视频游戏中按下某些键时(例如CS:GO),我都会记录下来,这样我就可以研究有关我最常按下的键、击键之间的比率等等的数据。我开发了以下功能: def key_down(key): state = win32api.GetKeyState(ord(key)) if state != 0 and state != 1: return True else: return Fal

我正在尝试开发一个程序,每当我在视频游戏中按下某些键时(例如CS:GO),我都会记录下来,这样我就可以研究有关我最常按下的键、击键之间的比率等等的数据。我开发了以下功能:

def key_down(key):
        state = win32api.GetKeyState(ord(key))
        if state != 0 and state != 1:
            return True
        else:
            return False

然而,当我尝试在游戏中使用此功能时(我有windows操作系统),它无法检测任何给定键的击键。这个难题有没有可行的解决方案?

事实证明,这个问题是GetKeyState工作方式的固有问题

顺便说一下,您的代码块可以写得更简洁一些,如下所示:

def key_down(key):
    state = win32api.GetKeyState(ord(key))
    return state not in {0, 1}

使用pygame模块,它可以很容易地检测到击键文档链接turotorial链接感谢您提供了一个值得考虑的答案,但我认为这不会解决我的问题。由于目前不在家,我无法提供更多的媒体,但代码似乎在我打开的任何视频游戏之外都运行得很好:当我按下一个键时,它被记录了下来。然而,我的前台应用程序打开了一个视频游戏,这似乎影响了代码的性能。这有什么原因吗?感谢您的代码块建议。的文档解释了为什么不能使用它:“当线程从其消息队列读取密钥消息时,此函数返回的密钥状态将发生更改。”它不会在另一个线程或进程的上下文中观察密钥状态。除此之外,取样总是错误的。相反,您需要响应事件,这是一个很难教给Python开发人员的范例。无论如何,选择一个低级键盘钩子或使用原始输入。@IInspectable感谢您的更正,我根据这个新信息删除了我的评论。很明显,你比我更了解WinAPI和C++。但是,(1)为什么你说很难教Python开发人员如何响应事件?(2) 学习WinAPI有哪些好的资源?
1
只是一个观察。我记得,对于Python问题,我还没有看到一个建议的答案,它甚至可以承认基于事件的解决方案的存在
2
你必须学习C语言。学完后你会发现很多资源,比如。尽管标题是C,但是在学习Windows API之前,你必须完全了解C。