【问题标题】:C , Xlib, can't get the name of focussed windowC,Xlib,无法获得焦点窗口的名称
【发布时间】:2021-07-17 09:47:59
【问题描述】:

这是我正在使用的代码,

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

      Display *dpy;
      char *window_name_return = NULL;
      Window focused;
      int revert_to;

void main(){
    
    dpy = XOpenDisplay(NULL) ;
    if(!dpy) printf("error\n");
        
    XGetInputFocus(dpy, &focused, &revert_to);
    XFetchName(dpy, focused, &window_name_return);
    XFree(window_name_return);
    printf("Focus on %s\n", window_name_return);
    XCloseDisplay(dpy);
}

这仅适用于终端仿真器窗口,对于其他窗口,程序返回 null。 XFetchName 的文档说,

如果没有为此窗口设置 WM_NAME 属性,XFetchName() 将 window_name_return 设置为 NULL

这就是它不起作用的原因吗?我用的是dwm窗口管理器,在Openbox中运行代码也没有用。

如何更改代码以使其适用于所有类型的窗口?

【问题讨论】:

    标签: c linux x11 xlib xserver


    【解决方案1】:

    您的代码存在多个问题:

    • 首先是你没有检查XFetchName返回的状态;
    • 第二个你不检查window_name_return是否为空;
    • 第三个也是最糟糕的问题是在打印字符串之前释放字符串(使指针无效)。

    【讨论】:

    • 感谢您提供的信息,我昨天才尝试学习 Xlib,并且使用 C 已经很长时间了。
    猜你喜欢
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    • 2011-03-10
    相关资源
    最近更新 更多