C 如何为XA_主要所有者获取X11 XA_WM_类?

C 如何为XA_主要所有者获取X11 XA_WM_类?,c,linux,window,x11,C,Linux,Window,X11,我想获得一个窗口的类标题,该窗口在X窗口系统中拥有主剪贴板 我有以下代码: #include <X11/Xlib.h> #include <X11/Xatom.h> #include <X11/Xutil.h> #include <stdio.h> #include <stdlib.h> int main(int argc, char **argv) { Atom real; unsigned char *data; int form

我想获得一个窗口的类标题,该窗口在X窗口系统中拥有主剪贴板

我有以下代码:

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

int
main(int argc, char **argv)
{
Atom real;
unsigned char *data;
int format;
ulong n, extra;


  Display *dpy = XOpenDisplay(NULL);




  // Get the selection window
 Window window = XGetSelectionOwner(dpy, XA_PRIMARY);
printf("%d\n", (unsigned)window);


 XGetWindowProperty(dpy,  window, XA_WM_NAME, 0, ~0, False,
                        AnyPropertyType, &real, &format, &n, &extra,
                        &data) ;

 //     char *wm_class2 = data + strlen(data) + 1;
  printf("%s\n", data);
 // printf("%s\n", wm_class2);
return 0;
}

两点意见:1。没有XA_WM_标题(你是指XA_WM_名称吗?)。还要注意,基于XDG的X客户机将使用NET\u WM\u NAME atom。Yu可能需要查询这两个属性才能覆盖。还要注意,即使找不到任何属性,XGetWindowProperty也会返回Success。如果XGetWindowProperty失败或数据为空,则需要跳过结果。当前代码检查和状态。@感谢您的响应。对不起,这是我的困惑。我更新了它。@dash-o但是如果我用
XA\u WM\u NAME
替换
XA\u WM\u CLASS
,它会打印窗口名。很抱歉延迟。您能否验证您的窗口(基于ID)是否具有您要查找的X属性(WM_类)?使用xprop-id。这将为您提供主支架窗口的指示。所有者可能是子窗口,并且没有类。通常,只有顶级应用程序才会设置WM_类。
xprop -id  94372511
_NET_WM_ALLOWED_ACTIONS(ATOM) = _NET_WM_ACTION_MOVE, _NET_WM_ACTION_RESIZE, _NET_WM_ACTION_STICK, _NET_WM_ACTION_MINIMIZE, _NET_WM_ACTION_MAXIMIZE_HORZ, _NET_WM_ACTION_MAXIMIZE_VERT, _NET_WM_ACTION_FULLSCREEN, _NET_WM_ACTION_CLOSE, _NET_WM_ACTION_CHANGE_DESKTOP, _NET_WM_ACTION_ABOVE, _NET_WM_ACTION_BELOW
WM_NAME(STRING) = "Chromium clipboard"