4日後、XLibの動作を確認しようとしました。 私は開いたウィンドウの名前を取得する短いプログラムを作ろうとしました。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;
}
ので、この最初の関数は、すべてのウィンドウのwindowオブジェクトを返します。そのために は、私は2つの機能を作成しました。 次に、これらのすべてのウィンドウから名前を取得する関数を作成しました。
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は空白です(実際には2つのSkypeウィンドウが開いています)。
お願いします。
XFetchName関数を使用してウィンドウ名を取得しようとしましたか? –
はい(null)を返します。 – ex0ns