汤姆回答了你问题的第一部分.答案的第二部分是:要获取X11窗口的id,您将不得不使用本机代码(用C或C编写的代码)并通过JNI接口访问它.
您可能必须通过所有现有窗口按标题运行搜索才能获得所需的搜索.
这是一个递归函数,它将搜索(从根窗口开始)具有所需名称的窗口
Window windowWithName(Display *dpy, Window top, char *name)
{
Window *children, dummy;
unsigned int nchildren;
unsigned int i;
Window w = 0;
char *window_name;
if (XFetchName(dpy, top, &window_name) && !strcmp(window_name, name))
return (top);
if (!XQueryTree(dpy, top, &dummy, &dummy, &children, &nchildren))
return (0);
for (i = 0; i < nchildren; i++)
{
w = windowWithName(dpy, children[i], name);
if (w)
break;
}
if (children)
XFree((char *) children);
return (w);
}
注意:**遗憾的是,在X11中实现的XFetchName函数中存在一个记录良好的内存泄漏,该函数从未修复过.如果你运行valgrind并且有轻微的内存泄漏问题,那么这是什么导致它们.