代码之家  ›  专栏  ›  技术社区  ›  mingos

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

  •  9
  • mingos  · 技术社区  · 16 年前

    我正在做一个项目,这个项目应该同时在Windows和Linux上工作(也有一个非官方的Mac端口),它模拟一个真正的彩色系统控制台。

    我的问题是最近出现了一个对textfield支持的请求(是的,基于控制台),添加将文本复制到剪贴板并从中粘贴的可能性是很酷的。是否有一种方法可以实现这一点:

    • 在C(非C++)中完成,
    • 在Windows和Linux中都可以使用(如果没有独立于平台的代码,可以选择预处理器宏)。
    • 不需要额外的库来链接?

    事先谢谢你的帮助。

    4 回复  |  直到 16 年前
        1
  •  5
  •   Seth    16 年前

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

    记住,在Macintosh上,您使用的是command-c而不是ctrl+c:。

        2
  •  4
  •   Tyler McHenry    16 年前

    剪贴板本质上是一个操作系统定义的概念。C语言本身不知道剪贴板是什么,也不知道如何操作它。你 必须 或者直接与操作系统接口,或者使用代表您这样做的可移植性库。这是不可能的。

        3
  •  4
  •   Christopher Tarquini    16 年前

    我个人会定义我自己的功能

    getClipboardText();
    

    这是在两个不同的头文件(linux_clipboard.h、windows_clipboard.h等)中定义的,然后执行预处理器操作以相应地加载相应的头文件。我在C/C++中没有真正的代码,所以我很抱歉如果这没有任何意义或者是不好的练习,但我就是这样做的。

    #if WIN32
    #include windows_clipboard.h
    #endif
    

    那种事

    记得: 对于Linux,您必须使用不同的管理剪贴板的方法来处理不同的窗口管理器(gnome、kde)。在设计应用程序时请记住这一点。

        4
  •  1
  •   t0mm13b    16 年前

    您可以使用 xclip . 您可以在这里使用这个python脚本通过与“dcop”和“klipper”通信来完成这个任务。 here . 那是给kde的,我不知道在gnome下会怎么做…您也可以使用dbus独立地完成gnome/kde,尽管我也不能百分之百地自信地说…

    请注意,对于真正的跨平台工作,您必须考虑不同的GUI,例如Linux下,x是主窗口管理器接口,gnome/kde位于其上。…我不是单独列出其他的GUI,如FluxBox、WindowMaker等,只是列出一些,而且会有很多依赖平台的代码,以及LSO结合起来,你也将处理Windows剪贴板……总之,一个大的集成代码……

    您是否考虑过查看原始X编程API以获得剪贴板支持?也许这会比我想象的更好,gnome/kde等正在使用x的api来做剪贴板的工作……如果确认了这一点,那么工作将被切断,并且独立于主要的gui接口……(我希望情况如此,因为它将使您的项目更容易生活!)

    可能对每个平台使用编译时开关…win、kde、gnome、mac或使用已经预先定义的开关。

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