LINUX.ORG.RU

X window id


0

0

Как можно при запуске иксового приложения как нибудь из шелла получить его window ID? Подскажите пожалуйста.

anonymous

Переопределить иксовую функцию с помощью LD_PRELOAD и сделать так, чтобы она на консоль выводила id окна при его создании ;)

Или можно все X-вые сообщения перехватывать, и искать в них создание окна. Например, что-то похожее делает mozplugger, он тоже id окна перхватывает. Это довольно простое и небольшое приложение, код можно взять оттуда.

А вообще это не очень естественно. Вы уверены, что это нужно?

welkam ★★
()
Ответ на: комментарий от welkam

Нужно. Объясняю для чего. Надо steal(swallow) сделать, т.е. окно другой программы встроить в свое. Можно впринципе по заголовку, но у проги которую надо впихнуть, заголовок постоянно меняется. Делаю на tcl/tk при помощи BLT-container. Если подскажете, как сделать проще, буду весьма благодарен.

anonymous
()

>Как можно при запуске иксового приложения как нибудь из шелла получить его window ID? Подскажите пожалуйста.

единственный корректный вариант это когда само приложение расскажет свой window_id что наиболее просто сделать при помощи LD_PRELOAD

cvv ★★★★★
()
Ответ на: комментарий от cvv

А как именно это сделать? Или ткните в почитать по поводу... А то я о LD_PRELOAD имею весьма смутное представление...

anonymous
()
Ответ на: комментарий от anonymous

вобщем вам надо написать собственную динамическую либу которая заменит несколько ф-й xlib типа XCreateWindow, XCreateSimpleWindow ну и выдаст в нужное вам место инфу о созданном окне

cvv ★★★★★
()
Ответ на: комментарий от anonymous

ну ещё можешь поискать нужное тебе приложение в списке окон xserver-a только есть риск с кемто спутать. хотя то что ты хочеш упростить так там на день работы для начинающего(чайника)

порыщ в гугле xfontdump.txt и сделай по образу и подобию:



OL>     Mozhet mozhno kakim-to cnifepom ppocmotpet' kakie ppogpamma shpifty                                                    
OL> zappashivaet y cepvepa. Pocovetyjte gotovyyu tehnologiyu, a to vpemeni pazb                                                
ipat'                                                                                                                          
OL> H-ppotokol covcem net.                                                                                                     
                                                                                                                               
`Eto gorazdo prosche sdelat' ne sniferom protokola, a perehvatom vyzovov                                                       
xlib.                                                                                                                          
                                                                                                                               
=cut xfontdump.c                                                                                                               
                                                                                                                               
#include <dlfcn.h>                                                                                                             
#include <X11/Xlib.h>                                                                                                          
#include <X11/Xutil.h>                                                                                                         
#include <unistd.h>                                                                                                            
#include <string.h>                                                                                                            
/*                                                                                                                             
   Devoted to Cyril Slobin for his excellent works in area                                                                     
   of Russification                                                                                                            
                                                                                                                               
   Copyright (C) 2002 by V. Wagner                                                                                             
 */                                                                                                                            
void report(const char *function, const char *name);                                                                           
XFontStruct *(*RealLoadQueryFont) (Display *display, const char* name);                                                        
Font (*RealLoadFont) (Display *display, const char *name);                                                                     
Display* XOpenDisplay( const char* display_name) {                                                                             
    void * handle=dlopen("libX11.so.6", RTLD_NOW | RTLD_GLOBAL);                                                               
    void *(*RealOpenDisplay)(const char*);                                                                                     
    if (!handle) exit(127);                                                                                                    
    RealOpenDisplay=dlsym(handle, "XOpenDisplay");                                                                             
    RealLoadQueryFont=dlsym(handle, "XLoadQueryFont");                                                                         
        RealLoadFont=dlsym(handle,"XLoadFont");                                                                                
    return (*RealOpenDisplay)(display_name);                                                                                   
}                                                                                                                              
XFontStruct *XLoadQueryFont (Display *display, _Xconst char* name) {                                                           
  report("XLoadQueryFont",name);                                                                                               
  return (*RealLoadQueryFont) (display, name);                                                                                 
}                                                                                                                              
Font XLoadFont (Display *display, _Xconst char *name) {                                                                        
  report("XLoadFont",name);                                                                                                    
  return (*RealLoadFont) (display, name);                                                                                      
}                                                                                                                              

void report (const char *function,const char *name) {                                                                          
  char buffer[1024];                                                                                                           
  strcpy(buffer,function);                                                                                                     
  strcat(buffer,": ");                                                                                                         
  strcat(buffer,name);                                                                                                         
  strcat(buffer,"\n");                                                                                                         
  write(2,buffer,strlen(buffer));                                                                                              
}                                                                                                                              
=cut                                                                                                                           
                                                                                                                               
Sobiraetsya komandoj  gcc -o xfontdump.so -shared -fPIC xfontdump.c                                                            
                                                                                                                               
Dalee issleduemaya programma vyzyvaetsya posredstvom                                                                           
                                                                                                                               
LD_PRELOAD=xfontdump.so program                                                                                                

cvv ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.