我試圖用Xlib來控制Xterm。 爲此,我製作了一個帶有奇怪標題的Xterm。列出所有窗口並檢查他們的名字後。但是,我的Xterm的列表中沒有出現任何列表時出現的錯誤。下面是列出所有窗口的代碼:Xlib測試窗口名稱
void CMD::getWindowTerminal()
{
Atom a = XInternAtom(m_display, "_NET_CLIENT_LIST", true);
Atom actualType;
int format;
unsigned long numItems, bytesAfter;
unsigned char *data = 0;
int status = XGetWindowProperty(m_display, m_root_win, a, 0L, (~0L), false,
AnyPropertyType, &actualType, &format, &numItems,
&bytesAfter, &data);
if (status >= Success && numItems)
{
long *array = (long*) data;
for (unsigned long k = 0; k < numItems; k++)
{
// get window Id:
Window w = (Window) array[k];
char* name = '\0';
status = XFetchName(m_display, w, &name);
if (status >= Success)
{
std::cout << w << " " << name << std::endl;
if (name == NULL)
{
m_window_terminal = w;
std::cout << "TERMINAL FOUND" << std::endl;
}
}
XFree(name);
}
XFree(data);
}
}
重啓後Xterm出現在列表中。當程序關閉時,我需要解放使用的Window的內存?如果我需要我該怎麼做?謝謝。 – loustak
經過對你的代碼進行了一些測試後,有時他沒有找到控制檯,因爲我認爲X服務器創建窗口,但不更新窗口列表。不是? – loustak
這到底是什麼情況?你的代碼有時沒有找到窗口,或者我的代碼,或者兩者兼而有之?當你搜索它的代碼正在運行時,你有多確定窗口是完全構建的? – Wintermute