2015-05-23 14 views
5

Sto cercando di utilizzare C e Xlib per inviare un evento di pressione di un tasto falso alla finestra con messa a fuoco, ecco il mio codice:invio falso evento keypress a una finestra usando Xlib

#include <X11/Xlib.h> 
#include <X11/keysymdef.h> 
#define XK_A   0x041 

int main() 
{ 
     Display *display = XOpenDisplay(NULL); 
     //find out window with current focus: 
     Window winfocus; 
     int revert; 
     XGetInputFocus(display, &winfocus, &revert); 

     //send key event to taht window 
     KeySym sym; 
     sym=XStringToKeysym("a"); 
     //event definition 
     XKeyEvent event; 
     event.type=KeyPress; 
     event.keycode=XK_A; 
     event.display=display; 
     event.root=winfocus; 
     XSendEvent(display,winfocus,True,KeyPressMask,(XEvent *)&event); 

     return 0; 
} 

Sto cercando di mantenere il codice più semplice possibile, voglio inviare la lettera a alla finestra attiva penso che sto facendo qualcosa di sbagliato se

grazie


ho provato il seguente codice:

#include <stdio.h> 
#include <X11/Xlib.h> 
#include <X11/Xresource.h> 
#include <X11/Intrinsic.h> 
#include <X11/extensions/XTest.h> 
#include <unistd.h> 


int main() 
{ 
     Display *dis; 
     dis = XOpenDisplay(NULL); 
     KeyCode modcode = 0; //init value 
     modcode = XKeysymToKeycode(dis, XK_B); 
     XTestFakeKeyEvent(dis, modcode, True, 0); 
     XFlush(dis); 
     sleep(1); 
     XTestFakeKeyEvent(dis, modcode, False, 0); 
     XFlush(dis); 
     modcode = XKeysymToKeycode(dis, XK_A); 
     XTestFakeKeyEvent(dis, modcode, True, 0); 
     XFlush(dis); 




     return 0; 
} 

che preme ripetutamente il tasto a, io sono in grado di rilasciare tale pulsante, se io non utilizzare la funzione di sonno, io sono in grado di digitare la lettera in una volta e poi rilasciare il tasto premuto

risposta

1

ce l'ha, non so se questo è il modo rightt per farlo, ma ottiene il lavoro fatto: un rilascio chiave prima della pressione del tasto sistemato tutto

#include <stdio.h> 
#include <X11/Xlib.h> 
#include <X11/Intrinsic.h> 
#include <X11/extensions/XTest.h> 


int main() 
{ 
     Display *dis; 
     dis = XOpenDisplay(NULL); 
     KeyCode modcode = 0; //init value 
     int i; 
     char hello[]="hello"; 
     for (i=0;i<5;i++) 
     { 
       modcode = XKeysymToKeycode(dis, XStringToKeysym("a")); 
       XTestFakeKeyEvent(dis, modcode, False, 0); 
       XFlush(dis); 
     //  sleep(1); 
       XTestFakeKeyEvent(dis, modcode, True, 0); 
       XFlush(dis); 
       XTestFakeKeyEvent(dis, modcode, False, 0); 
       XFlush(dis); 
} 



     return 0; 
} 

questo tipo in 5 ' a's

0

Questo assomiglia molto a un esempio (senza risposta) su Linux Domande: XLib problem (XSendEvent)

a parte l'ovvio (nessun controllo degli errori), forse guardando a come gli altri a risolvere il problema avrebbe dato alcuni suggerimenti:

Problemi correlati