domingo, 18 de julio de 2010

Modificar la posicion en pantalla de una aplicacion X en ejecucion

Se puede modificar algunos parametros de una aplicacion X en ejecucion para ello solo es necesario conocer la ID de esa aplicacion. El programa xwininfo nos puede ayudar para este proposito (lease su manual --> man xwininfo) su modo de uso es el siguiente.
Al ejecutar en consola el xwininfo este cambiara el cursor a una forma de cruz lo que nos indica que debemos seleccionar la aplicacion X que queremos saber sus propiedades, solo haga crick en la ventana de la aplicacion y xwininfo mostrara una salida como la siguiente:
------------------------
xwininfo: Please select the window about which you
would like information by clicking the
mouse in that window.

xwininfo: Window id: 0x1a0000d "xterm"

Absolute upper-left X: 5
Absolute upper-left Y: 25
Relative upper-left X: 0
Relative upper-left Y: 0
Width: 501
Height: 316
Depth: 16
Visual Class: TrueColor
Border width: 0
Class: InputOutput
Colormap: 0x20 (installed)
Bit Gravity State: NorthWestGravity
Window Gravity State: NorthWestGravity
Backing Store State: NotUseful
Save Under State: no
Map State: IsViewable
Override Redirect State: no
Corners: +5+25 -774+25 -774-683 +5-683
-geometry 80x24+1+1

-----------------------
Lo que interesa es la ID de la aplicacion que se encuentra en la siguiente linea
xwininfo: Window id: 0x1a0000d "xterm"
La iD sera ==> 0x1a0000d
Pero para el uso dela aplicacion C que permitira cambiarle sus propiedades es necesario usar un valor decimal ya que lo que muestra por defecto la aplicacion xwininfo es en hexadecimal. Para ello solo hay que agregarle el siguiente parametro:
xwininfo -int
Y mostrara el siguiente resultado
xwininfo: Window id: 27262989 "xterm"
Ya tenemos la informacion necesaria que es la ID de la aplicacion X , lo siguiente es desarrollar el programa en C que por el momento solo permitira cambiar la posicion en pantalla de la ventana ya luego en los siguientes post se le agregara nuevas funcionalidades.

/*---------xcambiargeo.c-----------*/
#include < stdio.h >
#include < stdlib.h >
#include < X11/Xlib.h >
#include < X11/Xutil.h >

int main(int argc,char *argv[])
{
Display *display;
int XwinID,Xwin_nuevaX,Xwin_nuevaY;

if(argc != 4){
fprintf(stderr,"Usar:%s nueva_posicion_x nueva_posicion_y XwinID\n",argv[0]);
return 0;
}

Xwin_nuevaX=atoi(argv[1]);
Xwin_nuevaY=atoi(argv[2]);
XwinID=atoi(argv[3]);

printf("nueva_posicion_x=%d nueva_posicion_y=%d Xaplicacion=%d \n",Xwin_nuevaX,Xwin_nuevaY,XwinID);

display = XOpenDisplay( NULL );
if(display==NULL)
{
printf("Error al abrir display\n");
return 0;
}
XMoveWindow( display,XwinID,Xwin_nuevaX,Xwin_nuevaY);
XCloseDisplay(display);
return 1;
}

/*---------------------------------*/
Compilando:
gcc -o xcambiargeo xcambiargeo.c -lX11
Uso:
./xcambiargeo nueva_posicion_x nueva_posicion_y XwinID
./xcambiargeo 200 300 27262989
Donde:
nueva_posicion_x => Es la posicion x en la pantalla
nueva_posicion_y => Es la posicion y en la pantalla
XwinID => La ID de la aplicacion X o la ventana
Al ejecutar el programa xcambiargeo , se observara que la aplicacion X cambiara de un lugar a otro en la pantalla.

No hay comentarios:

Publicar un comentario