[C con Clase] Ayuda Ventana Activa X window

D1e6o! diegogeid en gmail.com
Vie Ago 22 20:25:16 CEST 2008


Algún avance logre:

con la función Enviartecla, si la misma funcionara bien debería enviar
una tecla a la ventana activa si es llamada desde ahi pero no logro
que aparezca una tecla tipeada:

int Enviartecla( Display *display, Window window, int keycode, char
PressOrRelease )
{
   int estado;
	static int cuenta=0;
	cuenta++;
   XEvent evento;
memset(&evento, 0, sizeof(evento));
   evento.xkey.display = display;
   evento.xkey.window = window;
   evento.xkey.root = RootWindow( display, DefaultScreen(display));
   evento.xkey.time = CurrentTime;
   evento.xkey.state = PressOrRelease ? KeyPressMask : KeyReleaseMask;
   evento.xkey.type = PressOrRelease  ? KeyPress : KeyRelease ;
   evento.xkey.keycode = keycode;
   evento.xkey.x = evento.xkey.y = evento.xkey.x_root = evento.xkey.y_root = 0;
   evento.xkey.same_screen = 1;
   evento.xkey.subwindow = (Window) NULL;
	printf("#%d %s %c\n", cuenta, PressOrRelease ? "Presiona" : "Suelta", keycode);
//Status XSendEvent(display, window_dest, propagate, event_mask, event_send)
   estado = XSendEvent( display, window, False, evento.xkey.state, &evento );

   /*if( estado != 0 )
   {
      evento.time = CurrentTime;
      evento.type = KeyRelease;
      miestado = XSendEvent( display, window, False, KeyReleaseMask, &evento );
   }*/
	if(estado==0)printf("error");
   return(estado);
}

Donde intento llamarla de la siguiente forma:


int main{
...
Display *display;
Window focus;
int revert;
...
display = XOpenDisplay(NULL);
XGetInputFocus(display, &focus, &revert);
EnviarCodigo(display, focus,'0'+numero, preoel);

Además intenté cambiar focus por InputFocus sin ninguna mejora, así
como también '0'+número por 'a', 'e', etc... algo que no me queda
claro es para que sirve el tercer parámetro  de la función XSendEvent,
pero probé tanto con true como con false...
En la pantalla aparece "presiona 1", "suelta 2" como debería por lo
que al menos ese parámetro está llegando normalmente a la función

Alguna idea?

Sospecho que no está enviando la tecla a la ventana correcta pero
sinceramente no se como verificarlo.

Muchas gracias




Más información sobre la lista de distribución Cconclase