c/c++语言开发共享X11等待并获取剪贴板文本

我必须监控X11剪贴板。

目前,我每5秒请求一次ClipBoard选择,然后我对从剪贴板返回的文本进行哈希处理,并将其与上次检查中的哈希计算进行比较。 如果哈希不一样,我分析文本内容并做一些事情……

我不喜欢我的方法。 我来自Windows,并且使用winapi,它是内核,当剪贴板发生变化时会通知你的程序,并且效率更高!

我只是想知道当剪贴板发生变化时,X11是否可以将您的程序通知为winapi? 使用X11检查剪贴板修改的更有效方法是什么?

    使用XFixesSelectSelectionInput()扩展中的XFixesSelectSelectionInput()并等待XFixesSelectionNotify事件。

    例:

     // gcc -o xclipwatch xclipwatch.c -lX11 -lXfixes ... #include  ... void WatchSelection(Display *display, Window window, const char *bufname) { int event_base, error_base; XEvent event; Atom bufid = XInternAtom(display, bufname, False); assert( XFixesQueryExtension(display, &event_base, &error_base) ); XFixesSelectSelectionInput(display, DefaultRootWindow(display), bufid, XFixesSetSelectionOwnerNotifyMask); while (True) { XNextEvent(display, &event); if (event.type == event_base + XFixesSelectionNotify && ((XFixesSelectionNotifyEvent*)&event)->selection == bufid) { if (!PrintSelection(display, window, bufname, "UTF8_STRING")) PrintSelection(display, window, bufname, "STRING"); fflush(stdout); } } } ... 

    这适用于bufname == "CLIPBOARD"bufname == "PRIMARY"选择。

    另请参阅本答案中的 PrintSelection()函数。

    这是一个很好的参考: http : //www.jwz.org/doc/x-cut-and-paste.html

      以上就是c/c++开发分享X11等待并获取剪贴板文本相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/518885.html

      (0)
      上一篇 2020年12月5日
      下一篇 2020年12月5日

      精彩推荐