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.
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
@MPT, vous pouvez même utiliser 'nanosleep()' –