自4天以來,我嘗試瞭解XLib如何工作,並且我終於明白了這一點。 Si我試圖製作一個簡短的程序來檢索打開的窗口的名稱。 對於這一點,我創建了2個功能:XLib窗口名稱問題
Window *list (Display *disp, unsigned long *len) {
Atom prop = XInternAtom(disp,"_NET_CLIENT_LIST",False), type;
int form;
unsigned long remain;
unsigned char *list;
if (XGetWindowProperty(disp,XDefaultRootWindow(disp),prop,0,1024,False,XA_WINDOW,
&type,&form,len,&remain,&list) != Success) {
return 0;
}
return (Window*)list;
}
所以,這第一個函數返回的所有窗口的窗口對象。 然後,我創建了一個函數來從所有這些窗口中檢索名稱。
char *name (Display *disp, Window win) {
Atom prop = XInternAtom(disp,"WM_NAME",False), type;
int form;
unsigned long remain, len;
unsigned char *list;
if (XGetWindowProperty(disp,win,prop,0,1024,False,XA_STRING,
&type,&form,&len,&remain,&list) != Success) {
return NULL;
}
return (char*)list;
}
而且此功能工作正常,一個main.c中例如:
int main(int argc, char* argv[]){
int i;
unsigned long len;
XKeyEvent esend;
Display *disp = XOpenDisplay(NULL);
Window *list;
char *name;
list = (Window*)list(disp,&len);
for (i=0;i<(int)len;i++) {
name = name(disp,list[i]);
printf("%d : %s \n",i,name);
free(name);
}
}
而且,它的作品真的很好,除了它返回的Skype窗口:
1:Xlib的編程手冊:鍵盤和指針事件 - Google Chrome
2:Debian Web [安裝] - Oracle VM VirtualBox
3:XChat的:necromoine @ /(+ CSTfnst 10:2)
4:
5:根@根筆記本:〜
6:
並且,號碼4和6是空白的(我實際上有兩個打開的Skype窗口)。
你能幫我嗎。
您是否嘗試過使用XFetchName函數來獲取窗口名稱? – 2012-02-20 17:01:10
是的,它返回(null)。 – ex0ns 2012-02-20 18:48:05