如何将击键和鼠标移动发送到特定的 PID?

How can I send keystrokes and mouse movement to a specific PID?

如何通过其 PID 将击键和鼠标移动发送到特定的 运行ning 程序。我用过 pywinauto 和 pynput,它们工作得很好,但我想将密钥发送到一个不在焦点的程序。我发现了这个问题:How to I send keystroke to Linux process in Python by PID? 但它从未解释过 filePath 是什么路径。

如果你能帮助解决这个例子,那就太好了!我想将“d”键发送到打开的 Minecraft 选项卡 10 秒,然后在接下来的 10 秒内发送“a”键并停止。我需要它能够在后台 运行,所以它不能将密钥作为一个整体发送到计算机,而只能发送到 Minecraft 选项卡。顺便说一下,我在 Windows 10。

如有任何帮助,我们将不胜感激!

很确定你不会,至少不容易让我解释一下所有这些是如何工作的。

让我们从硬件和 os 开始,OS 具有某些功能来读取您给计算机的输入。此输入进入“管道”,OS 正在读取输入并放入管道,在管道的另一侧可能有一个应用程序 运行ning,也可能没有。 OS 通常通过定义哪个 app/window 是活动的来管理这个(哪个应用程序放在管道上监听)。应用程序使用 OS 给出的 API 访问此管道,它们读取输入并决定它。

你上面引用的库,改变了键盘和鼠标的值,换句话说,它们让 OS 读取其他值,而不是真实值,然后 OS 把它们在“管道”中,并由正在管道上侦听的应用程序(活动的)读取。有些应用程序为此有自己的 API,但我猜 Minecraft 没有。如果他们没有 API,你能做什么?好吧,正如我所说,没有什么容易的,首先是“破解”该应用程序,换句话说,将其更改为收听其他 input/output 而不是 OS 给出的那个(这将是你自己做 API)。另一个是您更改 OS,这也非常困难,但可能稍微容易一些。这也取决于你的 OS,我认为 Microsoft 确实提供输入注入 api 的

所以,简单的选择,首先,运行 一个带有 GUI 的虚拟机,然后使用 pywinauto、pyautogui 等。另一个选择是,如果你可以 运行 在浏览器中使用它,那么就这样做,并使用类似 Selenium 的东西来自动输入。

快速说明,为什么 selenium 可以工作并且浏览器可以在后台读取输入?很简单,事实并非如此,它只是执行它在读取输入时会执行的代码! javascript,酷不是

使用 ahk 你可以使用 Python+AutoHotkey

pip install ahk
pip install "ahk[binary]"
from ahk import AHK
from ahk.window import Window
ahk = AHK()
win = Window.from_pid(ahk, pid='20366')
win.send('abc') # send keys directly to the window

请注意,某些程序可能会在输入未聚焦时简单地忽略它们。但是,您可以通过使用 notepad

完全披露:我作者 the ahk library