【问题标题】:How do you detect keystrokes in video games with Python?如何使用 Python 检测视频游戏中的击键?
【发布时间】:2020-11-07 05:32:25
【问题描述】:

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

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

但是,当我尝试在游戏中使用此功能时(我有 Windows 操作系统),它无法检测到任何给定键的击键。有解决这个困境的可行方案吗?

【问题讨论】:

标签: python python-3.x windows keystroke


【解决方案1】:

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

顺便说一句,你的代码块可以写得更简洁一点:

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

【讨论】:

  • 感谢您提供值得考虑的答案,但我认为这不会解决我的问题。目前不在家里,我无法提供更多媒体,但代码似乎在我打开的任何视频游戏之外运行得很好:当我按下一个键时,它就会被记录下来。但是,似乎我打开了一个视频游戏作为我的前台应用程序这一事实以某种方式影响了代码的性能。有什么理由会这样吗?感谢您的代码块建议。
  • GetKeyState 的文档解释了为什么不能使用它:“当线程从其消息队列中读取关键消息时,此函数返回的关键状态会发生变化。”它不会在另一个线程或进程的上下文中观察键状态。除此之外,抽样总是错误的。相反,您将希望响应事件,这是一种很难教给 Python 开发人员的范例。无论如何,选择低级键盘挂钩或使用原始输入。
  • @IInspectable 感谢您的更正,鉴于此新信息,我删除了我的评论。很明显,您比我更了解 WinAPI 和 C++。但是,(1)为什么你说很难教 Python 开发人员响应事件? (2) 有哪些学习WinAPI的好资源?
  • 1 只是一个观察。我记得,我还没有看到对 Python 问题提出的single 答案可以承认存在基于事件的解决方案。 2 你将不得不学习 C。完成后你会发现很多资源,比如 Get Started with Win32 and C++。尽管标题是知道 C 就足够了。但是在学习 Windows API 之前,您必须绝对知道 C。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-11
  • 1970-01-01
  • 1970-01-01
  • 2014-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多