c++ - 为什么 XGetWindowProperty 返回 null?

标签 c++ x11

我正在使用以下命令获取所有 X 窗口的名称:

  Atom nameAtom = XInternAtom(dpy,"_NET_WM_NAME",false);
  Atom type;
  int format;
  unsigned long nitems, after;
  unsigned char *data = 0;

  if (Success == XGetWindowProperty(dpy, window, nameAtom, 0, 65536,
                                    false, XA_ATOM, &type, &format,
                                    &nitems, &after, &data)) {
    if (data) {
      Atom windowName = *(Atom*)data;
      const char* name = XGetAtomName(dpy, windowName);
      log.debug("Name: %s", name);
      XFree(data);
    }
  }

但在我的日志中,我只是为每个窗口获取 (null)。我做错了什么?

最佳答案

所需的是将 req_type 相应地指定为 UTF8_STRING:

  Atom nameAtom = XInternAtom(dpy,"_NET_WM_NAME",false);
  Atom utf8Atom = XInternAtom(dpy,"UTF8_STRING",false);
  Atom type;
  int format;
  unsigned long nitems, after;
  unsigned char *data = 0;

  if (Success == XGetWindowProperty(dpy, window, nameAtom, 0, 65536,
                                    false, utf8Atom, &type, &format,
                                    &nitems, &after, &data)) {
    if (data) {
      log.debug("Name: %s", data);
      XFree(data);
    }
  }

关于c++ - 为什么 XGetWindowProperty 返回 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8925377/

相关文章:

c++ - 如何在 boost::variant<T> 中存储引用而不是复制对象?

c++ - 如何为 MinGW 用户安装 gcc-arm-none-eabi?

javascript - X Windows 风格的 JS UI 客户端

linux - 我如何防止 X11 为 tty7 设置 opost?

c++ - 将 ncurses 键事件转发到 X11 窗口

c++ - 将 shared_ptr 传递给线程

c++ - 为什么这个 C++ 代码可以编译?它有什么作用?

c++ - 使用 POCO 启动后台进程

linux - 你将如何在 Linux 上构建 "pixel perfect"GUI?

c++ - 将监视器限制在 Linux 中的某个区域