C、Xlib、can和x27;无法获取聚焦窗口的名称
这是我正在使用的代码C、Xlib、can和x27;无法获取聚焦窗口的名称,c,linux,x11,xlib,xserver,C,Linux,X11,Xlib,Xserver,这是我正在使用的代码 #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
#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);
}
#包括
#包括
显示*dpy;
char*window\u name\u return=NULL;
窗口聚焦;
int返回到;
void main(){
dpy=XOpenDisplay(空);
如果(!dpy)printf(“错误\n”);
XGetInputFocus(dpy、聚焦和还原);
XFetchName(dpy、聚焦和窗口名称返回);
XFree(窗口名称返回);
printf(“关注%s\n”,窗口名称\u返回);
XCloseDisplay(dpy);
}
这只适用于终端仿真器窗口,对于其他窗口,程序返回null。
XFetchName
的文档中说
如果尚未为此窗口设置WM_NAME属性,则XFetchName()
将窗口名称设置为NULL
这就是它不起作用的原因吗?我使用dwm窗口管理器,在Openbox中运行代码也不起作用
如何更改代码以使其适用于所有类型的窗口?您的代码中存在多个问题:
- 首先,您不检查由
返回的状态李>XFetchName
- 第二个不检查
是否为空李>window\u name\u return
- 第三个也是最糟糕的问题是在打印字符串之前释放字符串(使指针无效)