在Linux中将文本粘贴到活动窗口

1 投票
2 回答
1108 浏览
提问于 2025-04-15 14:27

我想写一个应用程序,当我按下某个键时,它能把一些文字粘贴到当前活动的窗口里。请问我该如何用Python或C++来实现这个功能?

我想开发一个像后台程序一样的应用,它能在我按下某个全局快捷键时,把一些文字粘贴到当前正在使用的应用程序里,比如文本编辑器、浏览器或者聊天软件。我觉得我可能需要使用一些低级的X窗口服务器API。

2 个回答

0

如果你使用Tkinter(一个可以在Linux、Mac OS X、Windows等系统上运行的图形界面库),当你创建任何小部件(比如文本框)时,复制(Ctrl + C)和粘贴(Ctrl + V)的功能会自动生效。举个例子,下面的代码展示了一个文本框,你可以在里面输入多行文字,并且可以把这些文字复制到其他应用程序中,或者从其他应用程序(比如OpenOffice)粘贴过来。

from Tkinter import *
root = Tk()                 # Initialize GUI
t = Text(root)              # Create a text widget
t.grid()                    # Show the widget
root.mainloop()             # Start the GUI

我在Windows和Linux/KDE 3.5上测试过这个代码。

1

在多个应用程序之间进行交互可能会有点复杂,所以如果你能提供更多具体的信息,说明你想做什么,那会更有帮助。

不过,如果你想通过剪贴板来实现这个功能,你有几个选择。在Windows系统上,Windows提供了一些API,比如GetClipboardDataSetClipboardData。如果你想在Python中使用这些功能,可以利用win32com这个库。

在Linux系统上,我知道有两个主要的选择来与剪贴板交互。PyGTK提供了一个gtk.Clipboard对象。此外,还有一个命令行工具可以设置X的“选择”,叫做XSel。你可以通过os.popensubprocess来使用Python与XSel进行交互。有关如何使用gtk.Clipboard和xsel的信息,可以参考这份指南

至于如何实际使用剪贴板,一个应用程序可能会定期检查剪贴板,看看有没有变化。

如果你想深入了解更“企业级”的架构,可以使用消息总线,比如RabbitMQ,来在两个应用程序之间进行通信。

撰写回答