使用Xlib关闭应用程序窗口

时间:2014-09-27 09:56:09

标签: c x11 xlib

我尝试使用其ID中的Xlib关闭应用程序窗口。使用wmctrl的源代码作为指导,下面是我认为应该实现此目标的最小C程序,其中Window的ID指定为argv[1]

#include <stdio.h>
#include <X11/Xlib.h>
#include <X11/Xatom.h>

int main (int argc, char *argv[]) {
    Display *disp;
    unsigned long wid;
    XEvent event;

    disp = XOpenDisplay(NULL);
    sscanf(argv[1], "0x%lx", &wid);

    long mask = SubstructureRedirectMask | SubstructureNotifyMask;

    event.xclient.type = ClientMessage;
    event.xclient.serial = 0;
    event.xclient.send_event = True;
    event.xclient.message_type = XInternAtom(disp, "_NET_CLOSE_WINDOW", False);
    event.xclient.window = (Window)wid;
    event.xclient.format = 32;
    event.xclient.data.l[0] = 0;
    event.xclient.data.l[1] = 0;
    event.xclient.data.l[2] = 0;
    event.xclient.data.l[3] = 0;
    event.xclient.data.l[4] = 0;

    XSendEvent(disp, DefaultRootWindow(disp), False, mask, &event);
}

我不确定为什么我不理解/缺少这一点。

1 个答案:

答案 0 :(得分:1)

添加:

XSync(disp, False);

main的结尾。如上所述,您的程序在有机会实际向服务器发送请求之前退出,因为XLib会缓冲请求。