如何直接写入屏幕?

时间:2016-03-09 10:19:41

标签: graphics x11 window-management

具体来说,我想在显示器上,在所有其他窗口的顶部显示文本和图像,但没有可点击或以任何可能的方式进行交互 - 点击它应该直接进入下面的任何窗口。< / p>

到目前为止,我的研究让我尝试阅读有关复合叠加窗口的X文档,但遗憾的是我无法随意使用它。我找到的唯一有帮助的资源是一个小的nodejs库(node-x11),遗憾的是它似乎已被遗弃但仍然不完整,而且我无法开始工作。显然还有一个python库,但它似乎比nodejs更不完整。

1 个答案:

答案 0 :(得分:1)

node-x11作者在这里(并没有放弃,我只是添加了我需要的功能或用户请求的功能,所以如果你遗漏了什么请填写问题!)

您可以使用composite extension中的GetOverlayWindow

  

协议版本0.3添加了复合叠加窗口,其中   为合成管理者提供一个无需绘制的表面   干扰。此窗口始终高于正常窗口   屏幕保护程序窗口下方。它是一个InputOutput窗口,其宽度   和高度是屏幕尺寸。它的视觉是根视觉   它的边界宽度为零。试图使用。重定向它   复合扩展被忽略。此窗口不会出现在   QueryTree请求的回复。它也是一个覆盖重定向窗口。   最后两个功能使窗口管理器和其他X11不可见   客户端。访问此窗口的XID的唯一方法是通过   CompositeGetOverlayWindow请求。最初,复合叠加   窗口未映射。

     

CompositeGetOverlayWindow返回Composite Overlay的XID   窗口。如果窗口尚未映射,则由此映射   请求。调用此请求的所有客户端都已终止   他们的X11连接窗口未映射。

     

复合管理器可以直接渲染到复合叠加层   窗户,或者他们可能重新将其他窗户重新成为这个孩子   窗口并渲染到这些。多个客户端可能会呈现给   复合叠加窗口,创建它的子窗口,重塑它,和   重新定义其输入区域,但遵循特定的仲裁规则   本规范未定义这些客户端;这些政策   应该由客户自己定义。

node-x11示例:

var x11 = require('x11');
x11.createClient(function(err, display) {
  var X = display.client;
  var root = display.screen[0].root;
  X.require('composite', function(err, Composite) {
    Composite.GetOverlayWindow(root, function(err, overlayId) {
      // now you can draw on overlayId window here.
    });
  });
});