操作系统独立剪贴板复制/粘贴C中的文本

我正在开发一个应该在Windows和Linux上工作的项目(还有一个非官方的Mac端口),可以模拟真正的色彩系统控制台。

我的问题是,最近出现了对文本字段支持的请求(是的,基于控制台),添加将文本复制到剪贴板并从中粘贴的可能性会很酷。 有没有办法实现这一目标:

  • 用C语言(不是C ++)完成,
  • 在Windows和Linux中工作(如果没有与平台无关的代码,预处理器宏是一个选项),
  • 不需要额外的库链接到?

在此先感谢您的帮助。

如果您没有使用跨平台UI库(如wx或其他东西),那么听起来您只需要为要支持的每个平台编写本机剪贴板代码。

请记住,在Macintoshes上,您使用Command-C复制,而不是Ctrl + C 🙂

剪贴板本质上是操作系统定义的概念。 C语言本身不知道剪贴板是什么或如何操作它。 您必须直接与操作系统接口,或使用代表您执行此操作的可移植性库。 没有办法解决这个问题。

就个人而言,我会定义我自己的function

getClipboardText(); 

这是在两个不同的头文件(linux_clipboard.h,windows_clipboard.h等)中定义的,然后执行预处理程序以相应地加载适当的头文件。 我真的没有用C / C ++编写代码,所以如果这没有任何意义或者是不好的做法我很抱歉,但这就是我要做的事情。

 #if WIN32 #include windows_clipboard.h #endif 

诸如此类的事情

请记住:对于Linux,您必须使用不同的管理剪贴板的方式处理不同的窗口管理器(Gnome,KDE)。 在设计应用时请记住这一点。

您可以使用xclip与剪贴板进行通信 。 你可以在这里使用这个python脚本通过与’dcop’和’klipper’进行通信来完成这项工作。 这是针对KDE的,我不知道它是如何在GNOME下完成的……你也可以通过使用DBUS独立完成GNOME / KDE,尽管我不能100%自信地说…

请注意,对于真正的跨平台工作,您必须考虑不同的GUI,例如在Linux下,X是主窗口管理器界面,GNOME / KDE位于它之上……我不是单挑其他GUI,如FluxBox,WindowMaker,仅举几例,并且会有很多平台相关的代码,同时也会同时处理Windows剪贴板……总而言之,这是一个很大的集成码…

您是否考虑过查看原始X编程API以获得剪贴板支持? 也许这可能会更好,正如我想象的那样,GNOME / KDE等正在使用X的API进行剪贴板工作……如果确认了,那么工作将被删除,并且独立于主要的GUI界面…… (我希望情况会如此,因为它会让你的项目更轻松!)

也许使用编译时开关,为每个平台… WIN,KDE,GNOME,MAC或使用已经预定义的那个。

希望这会有所帮助,最好的问候,汤姆。