繁体   English   中英

如果窗口内容发生变化,自动获取x服务器的屏幕截图

[英]Automatically take screenshot of x server if window contents change

我正在寻找一种方法来自动获取我的X服务器的屏幕截图,如果创建一个窗口或窗口的内容已更改。

我目前通过收听X11事件来实现这一目标,但并未报告所有更改。

查看来自Damage扩展的XDamageNotifyEvent,XDamageQueryExtension,XDamageCreate,XDamageSubtract。 此扩展名用于跟踪更改窗口内容。 http://www.freedesktop.org/wiki/Software/XDamage

一个很好的示例代码源是任何使窗口缩略图的东西。 此外,任何合成窗口管理器(Compiz,某些类型的metacity等)都将包含损坏跟踪代码。

没有扩展,您基本上必须轮询(在超时中更新窗口内容)。

我知道这篇文章已经死了。 然而,X11的文档非常糟糕,我花了很长时间才能让XDamage在任何方面都有效。 因此,这是一个示例,根据Havoc的帖子中提到的文档,每次根X11窗口更改时都会在控制台上打印一行,并且松散地基于以下链接

#include <stdio.h>
#include <stdlib.h>
#include <X11/extensions/Xdamage.h>
#include <X11/Xlib.h>
#include <signal.h>

int endnow = 0;

void cleanup(int SIGNUM){
    endnow = 1;
}

int main(){
    Display *display;
    display = XOpenDisplay(":0");
    if(!display){
        perror("could not open display");
        exit(1);
    }
    Window root = DefaultRootWindow(display);        

    int damage_event, damage_error, test;

    //this line is necessary to initialize things
    test = XDamageQueryExtension(display, &damage_event, &damage_error);
    /*The "event" output is apparently the integer that appears in the
    Xevent.type field when XNextEvent returns an XDamage event */
    printf("test = %d, event = %d, error = %d\n",test,damage_event, damage_error);

    //This is the handler for the XDamage interface
    //See the XDamage documentation for more damage report levels
    // http://www.freedesktop.org/wiki/Software/XDamage
    Damage damage = XDamageCreate(display, root, XDamageReportNonEmpty);

    signal(SIGINT,cleanup);

    // XCloseDisplay(display);
    while(endnow == 0){
        XEvent event;
        XNextEvent(display,&event);
        printf("event.type = %d\n",event.type);
        //this line resets the XDamage handler
        XDamageSubtract(display,damage,None,None);
    }
    XCloseDisplay(display);
    printf("done\n");
    exit(0);
}

当然,如果你从与你的显示器相同的屏幕上的控制台运行它:0 ,它打印的每一行都会自动激活,并且有点不稳定。 但是如果你从另一台计算机上的ssh终端运行它,这是一个很好的演示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM