【问题标题】:Keyboard Control Python键盘控制 Python
【发布时间】:2017-09-22 22:26:42
【问题描述】:

我想让python点击Enter。但是,我不想安装任何外部扩展。我希望它在不使用它们的情况下单击输入。我发现了很多像 win32 这样的资源,但我想在不使用外部资源的情况下做到这一点。我不介意它在哪个版本的 python 上。

  1. 这可能吗?
  2. 如果是,怎么做?

我在网上查看过,但找不到任何东西。请问,有人可以帮忙吗?

提前谢谢你。

【问题讨论】:

    标签: python python-2.7 python-3.x keyboard


    【解决方案1】:
    1. 是的。
    2. 绝对可以使用 ctypes 库直接与 Windows dll 对话

    如果您不想安装已经为您完成所有这些工作的帮助模块,那么您几乎必须按照非常低级的代码来做这件事。

    简而言之,使用ctypes.windll.user32.SendInput调用user32.dllSendInput函数。祝你参数正确 - 我没有耐心为你弄清楚。

    Here are the docs for the user32.dll SendInput API

    Here is a helpful resource for figuring out the data types. 这实际上是 ctypes 的一部分,可以通过 import ctypes.wintypes 导入,但我发现阅读实际代码很有指导意义。

    例如,用虚拟键码 VK_RETURN 的值创建一个 WORD,我认为应该是

    >>> ctypes.wintypes.WORD(0x0D)
    c_ushort(13)
    

    但是你还需要从那里拼凑起来。只需建立你的参数并调用函数。

    最后一个提示,使用第二个链接中的示例来了解如何构建“C”类型的结构。然后使用ctypes.Structure自己构建一个

    【讨论】:

    • 您在原始问题中没有说“简单”。哈哈!如果您只是安装一些东西,这会容易得多。如果您不想安装任何东西,我很难考虑其他解决方案。也许别人可以。也就是说,这种方法并不难,只是乏味。如果你从来没有做过那么低水平的事情,那么学习经验可能是值得的。这凸显了使用正确模块完成正确工作的价值。这里的问题是你不想安装正确的模块。
    • 也就是说,你可以开始撕开一些人们以前解决过这个问题的 github 代码,看看你发现了什么。但是,我认为您会发现大多数解决方案都会在某些时候利用 C 语言来实际与 API 对话。不过我可能是错的。
    • 使用user32 = ctypes.WinDLL('user32', use_last_error=True)ctypes.windll 是一个不可靠的全局缓存加载的库,缓存函数指针。当项目使用相同的库时,它可能会导致问题。它也不允许你将use_last_error=True设置为使用ctypes.get_last_error(),这比使用ctypes FFI调用GetLastError()更可靠。
    猜你喜欢
    • 1970-01-01
    • 2011-10-10
    • 2010-10-31
    • 1970-01-01
    • 2010-12-29
    • 2014-04-30
    • 2011-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多