【发布时间】:2017-09-22 22:26:42
【问题描述】:
我想让python点击Enter。但是,我不想安装任何外部扩展。我希望它在不使用它们的情况下单击输入。我发现了很多像 win32 这样的资源,但我想在不使用外部资源的情况下做到这一点。我不介意它在哪个版本的 python 上。
- 这可能吗?
- 如果是,怎么做?
我在网上查看过,但找不到任何东西。请问,有人可以帮忙吗?
提前谢谢你。
【问题讨论】:
标签: python python-2.7 python-3.x keyboard
我想让python点击Enter。但是,我不想安装任何外部扩展。我希望它在不使用它们的情况下单击输入。我发现了很多像 win32 这样的资源,但我想在不使用外部资源的情况下做到这一点。我不介意它在哪个版本的 python 上。
我在网上查看过,但找不到任何东西。请问,有人可以帮忙吗?
提前谢谢你。
【问题讨论】:
标签: python python-2.7 python-3.x keyboard
如果您不想安装已经为您完成所有这些工作的帮助模块,那么您几乎必须按照非常低级的代码来做这件事。
简而言之,使用ctypes.windll.user32.SendInput调用user32.dll的SendInput函数。祝你参数正确 - 我没有耐心为你弄清楚。
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自己构建一个
【讨论】:
user32 = ctypes.WinDLL('user32', use_last_error=True)。 ctypes.windll 是一个不可靠的全局缓存加载的库,缓存函数指针。当项目使用相同的库时,它可能会导致问题。它也不允许你将use_last_error=True设置为使用ctypes.get_last_error(),这比使用ctypes FFI调用GetLastError()更可靠。