Том ответил на первую часть вашего вопроса. Вторая часть ответа такова: чтобы получить идентификатор окна X11, вам нужно использовать собственный код (код, написанный на 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);
}
Примечание: ** к сожалению, в XFetchName реализована функция XFetchName, реализованная в X11, которая не была исправлена. Если вы запустили valgrind и у вас возникли незначительные проблемы с утечкой памяти, это является причиной их возникновения.