C 使用Xlib关闭应用程序窗口

C 使用Xlib关闭应用程序窗口,c,x11,xlib,C,X11,Xlib,我正在尝试使用Xlib从其ID关闭应用程序的窗口。以的源代码为指导,下面是一个我认为应该实现这一点的最小C程序,窗口的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

我正在尝试使用Xlib从其ID关闭应用程序的窗口。以的源代码为指导,下面是一个我认为应该实现这一点的最小C程序,窗口的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);
}
#包括
#包括
#包括
int main(int argc,char*argv[]){
显示*显示;
无符号长wid;
XEvent事件;
disp=XOpenDisplay(NULL);
sscanf(argv[1]、“0x%lx”、&wid);
长掩码=子结构重定向掩码|子结构通知掩码;
event.xclient.type=ClientMessage;
event.xclient.serial=0;
event.xclient.send_event=True;
event.xclient.message\u type=XInternAtom(disp,“\u NET\u CLOSE\u 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);
}
我不确定我不理解/缺少什么来实现这一点。

添加以下内容:

XSync(disp, False);
main
的末尾。如前所述,您的程序在有机会向服务器发送请求之前退出,因为XLib缓冲请求