2014-09-27 205 views
1

我試圖用ID從關閉應用程序的窗口使用Xlib。在使用wmctrl的源代碼作爲指導,下面是一個我認爲應該達到的最小C程序,其窗口ID被指定爲argv[1]用Xlib關閉應用程序窗口

#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

補充一點:

XSync(disp, False); 

main末。正如所寫,您的程序在它有機會真正向服務器發送請求之前退出,因爲XLib會緩衝請求。

相關問題