2012-02-23 6 views
4

J'essaie d'envoyer la clé d'une application avec XLib et XTestFakeKeyEvent, et il fonctionne très bien, avec le code suivant:XLib, XTestFakeKeyEvent latences

XSetInputFocus(disp, list[selectWindow],RevertToPointerRoot,CurrentTime); 
for(i=0;i<hello.size();i++){ 
    tamper[0] = hello[i]; 
    KeySym key = XStringToKeysym(tamper); 
    XTestFakeKeyEvent(disp,XKeysymToKeycode(disp, key),True, CurrentTime); 
    XTestFakeKeyEvent(disp,XKeysymToKeycode(disp, key),False, CurrentTime); 
} 

Où liste Sélectionner [selectWindow] est la fenêtre où j'envoyer des données et falsifie un char [2] (pour convertir char de hello [i] en char * pour la fonction Ce code écrit le contenu du hello wariable dans la fenêtre sélectionnée, mais le, j'ai essayé d'envoyer la touche Return,

XSetInputFocus(disp, list[selectWindow],RevertToPointerRoot,CurrentTime); 
XTestFakeKeyEvent(disp,XKeysymToKeycode(disp, XK_Return),True, CurrentTime); 
XTestFakeKeyEvent(disp,XKeysymToKeycode(disp, XK_Return),False, CurrentTime); 

Je sélectionne à nouveau la fenêtre et envoie le X K_Return clé de l'application, mais ça ne marche pas, je pense que c'est à cause d'un 'lag' avec Xlib, car si je mets un wait (2) à la fin de la boucle 'for', ça marche bien, mais Je ne veux pas attendre pendant 2 secondes chaque fois que j'envoie un message.

Je ne sais pas comment résoudre ce problème.

Merci.

+0

J'ai exactement le même problème. J'ai trouvé deux solutions de contournement. D'abord, l'attente après l'envoi. J'ai trouvé que je peux attendre beaucoup moins de 2 secondes. En utilisant le sommeil, cela ne marche qu'avec un dixième de seconde d'attente. Deuxièmement, si j'envoie deux (ou plus) retours, tous sauf le premier fonctionnent correctement (sans "sleep"). – MPT

+0

@MPT, vous pouvez même utiliser 'nanosleep()' –

Répondre

1

XFlush (disp) ou XSync (disp, false) après avoir appelé XTestFakeKeyEvent?

+0

Ni l'un ni l'autre (ni les deux ensemble) n'a résolu ce problème pour moi. – MPT

+0

'XFlush' m'a corrigé après avoir fait' XTestFakeKeyEvent'! Ça me rendait dingue, ça m'a complètement manqué. Merci pzan! – Noitidart