我如何在一些全局击键上使用 Python 或 C++ 将一些文本粘贴到 linux 中的当前活动应用程序

Posted

技术标签:

【中文标题】我如何在一些全局击键上使用 Python 或 C++ 将一些文本粘贴到 linux 中的当前活动应用程序【英文标题】:How can I, on some global keystroke, paste some text to current active application in linux with Python or C++ 【发布时间】:2009-09-26 07:18:01 【问题描述】:

我想编写一个应用程序,它将像一个守护进程一样工作,并且在一些全局按键上将一些文本粘贴到当前活动的应用程序(文本编辑器、浏览器、jabber 客户端)我想我需要使用一些低级别的 xserver api。我如何用 Python 或 C++ 做到这一点?

【问题讨论】:

【参考方案1】:

可能你想破解xmon...


AFAIK 没有简单的方法来挂钩 X 协议。您将需要进行“深度数据包检查”,这在应用程序事件循环中相当容易,但并不那么容易,如您所愿,“像一个守护进程”或“全局击键[s]”。

所以,我知道这确实是蛮力和无知的,但我认为您必须通过在非标准端口上启动 X 服务器或发布环境变量来包装 X 服务器,就像您使用 SSH 之类的东西一样用于转发 X 服务器连接的隧道。

有一个名为 Xmon 的 X 协议监视器,它的源可用。这可能是一个很好的起点。

【讨论】:

【参考方案2】:

我认为你可以在 X windows 下使用xmacroplay utility from xmacro 来执行此操作。要么直接使用它——使用 subprocess 模块将命令发送到标准输入,或者阅读源代码并了解它是如何做到的!我不认为它有 python 绑定。

来自 xmacroplay 网站

xmacroplay:
Reads lines from the standard input. It can understand the following lines:

Delay [sec]     - delays the program with [sec] secundums
ButtonPress [n] - sends a ButtonPress event with button [n]
          this emulates the pressing of the mouse button [n]
ButtonRelease [n]   - sends a ButtonRelease event with button [n]
          this emulates the releasing of the mouse button [n]
... snip lots more ...

这可能是你感兴趣的命令

String [max. 1024 long string]
        - Sends the string as single characters converted to
          KeyPress and KeyRelease events based on a
          character table in chartbl.h (currently only
          Latin1 is used...)

还有Xnee做类似的事情。

【讨论】:

以上是关于我如何在一些全局击键上使用 Python 或 C++ 将一些文本粘贴到 linux 中的当前活动应用程序的主要内容,如果未能解决你的问题,请参考以下文章

Python 将击键发送到非活动应用程序

通过 telnet 发送击键

[每个全局]按键上的声音(linux)

如何在powershell中执行击键?

如何让 python 检测键盘的击键并根据 Windows 中的输入键发送不同的字符串

替换到文本对象的末尾