c - 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
为空; - 第三个也是最糟糕的问题是在打印之前释放了字符串(使指针无效)。
推荐阅读
- postgresql - 来自 Azure Postgres 服务的 pg_dump,其中包含大型数据集
- javascript - 加载时随机更改 div 渐变背景
- database - 在 MongoDB 数组中查找索引
- html - Apple Pencil 点击按钮或锚元素在 web 应用程序上不起作用
- c - 如果条件包含 ++y vs y+=1
- vbscript - .vbs:Word 中页眉/页脚的写保护
- javascript - 如何为每个 API 创建通用的 Nest JS API 响应格式?
- java - 在Activity类Android中调用jar文件方法
- python-3.x - 如何从熊猫的链接中提取单词
- javascript - 如何在一个元素上创建一个事件切换 HTML 类,同时从其他元素中删除它?