【问题标题】:How does a program distinguish between real key presses and those sent by pyautogui, pywinauto etc.?程序如何区分真正的按键和 pyautogui、pywinauto 等发送的按键?
【发布时间】:2021-12-15 01:18:52
【问题描述】:

我一直在尝试编写一个将特定按键发送到游戏的脚本,但是它们只是被“忽略”,而脚本可以毫无问题地将完全相同的按键发送到任何其他窗口。我正在使用 WIN 10 x64、python 3.9 和 pyautogui 和 pywinatuo。

有没有简单的方法解决这个问题?请在回答时考虑我对编码的缺乏经验。

【问题讨论】:

  • 游戏可能使用自己的方法从硬件获取密钥(可能使用DirectX),它们可能不使用 Windows 使用的标准方法。而pyautoguipywinauto 使用 Windows 使用的标准方法。
  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: python windows-10 pyautogui pywinauto


【解决方案1】:

对于普通的 GUI 应用程序,没有简单的方法来区分真实点击和 pywinauto 的点击。如果您设置了监控键盘/鼠标挂钩,则 HOOK 结构中没有此类信息。所以答案是否定的。

【讨论】:

    【解决方案2】:

    我遇到了类似的问题,最终将所需的击键发送到串行端口,使用“串行”模块,使用 arduino ide 在“pro micro”上编写一些代码,该 ide 可以接受任何输入的字符串行端口,然后将所述字符或字符串输出到 USB。 pro micro的巧妙之处在于串口和usb可以是相同的物理连接。虽然我不得不对一些特殊字符(如 \r 和 \n)进行例外处理,但它工作得很好。我的应用程序无法识别来自 pyautogui 或 pywinauto 的键盘或鼠标输入,现在它在来自 USB 时可以识别它们,因为它看起来像任何其他硬件。如果您有兴趣,我将发送/发布 pro micro 的代码以及我如何使用它的一些示例。

    【讨论】:

    • 您好,感谢您的回复。巧合的是,我找到了完全相同的解决方案。使用 Pyserial 模块将编码的字符串发送到 raspberry pico,然后对其进行解码并以相应的击键/鼠标单击进行响应。但是,我最终使用了 2 个通信端口,(刚刚添加了包含 *usb_cdc.enable(data=True 代码到树莓派的 boot.py)。谢谢,我很乐意看看你的代码,也许我可以了解更多并提炼我的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    • 2020-09-30
    • 2018-07-18
    • 1970-01-01
    相关资源
    最近更新 更多