微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C , Xlib, 无法获取焦点窗口的名称

如何解决C , Xlib, 无法获取焦点窗口的名称

这是我正在使用的代码

#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 中运行代码也不起作用。

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

解决方法

您的代码中存在多个问题:

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。