2010-03-06 19 views
2

J'écris actuellement mon propre clavier virtuel pour Linux en utilisant la librairie X11 et je n'arrive pas à trouver le moyen de simuler un événement KeyPress d'une touche morte. J'ai essayé, par exemple, d'écrire "á" en utilisant la macro asigned, qui est XK_aacute, et rien ne se passe. plus tard, j'ai essayé d'envoyer XK_acute (la macro d'accent aigu) et puis XK_a, et encore, rien ne se passe :(Problème avec les touches mortes (aiguë, diaeresis, etc) C++

Dans le clavier virtuel KDE "Kvkbd" il est possible de le faire, donc j'ai téléchargé le code source , mais il ne supporte que la disposition du clavier anglais

Voici mon code de test:

#include <X11/Xlib.h> 
#include <X11/keysym.h> 
#include <X11/extensions/XTest.h> 
#include <iostream> 

int main(){ 
Display *display; 
unsigned int keycode; 
unsigned int keycode1; 
display = XOpenDisplay(NULL); 

keycode = XKeysymToKeycode(display, XK_aacute); 
XTestFakeKeyEvent(display, keycode, True, 0); 
XTestFakeKeyEvent(display, keycode, False, 0); 

keycode1 = XKeysymToKeycode(display, XK_acute); 
XTestFakeKeyEvent(display, keycode1, True, 0); 


keycode = XKeysymToKeycode(display, XK_a); 
XTestFakeKeyEvent(display, keycode, True, 0); 
XTestFakeKeyEvent(display, keycode, False, 0); 

XTestFakeKeyEvent(display, keycode1, False, 0); 


keycode = XKeysymToKeycode(display, XK_D); 
XTestFakeKeyEvent(display, keycode, True, 0); 
XTestFakeKeyEvent(display, keycode, False, 0); 
XFlush(display); 
} 

Toute aide ou idée sera beaucoup aprécié

Répondre

2

je viens de comprendre ¬¬

#include <X11/extensions/XTest.h> 
#include <X11/keysym.h> 
#include <X11/Xlib.h> 
#include <iostream> 

int main(){ 
Display *display; 
unsigned int keycode; 
unsigned int keycode1; 
display = XOpenDisplay(NULL); 

keycode1 = XKeysymToKeycode(display, XK_dead_acute); 
XTestFakeKeyEvent(display, keycode1, true, 0); 


keycode = XKeysymToKeycode(display, XK_A); 
XTestFakeKeyEvent(display, keycode, true, 0); 
XTestFakeKeyEvent(display, keycode, false, 0); 

XTestFakeKeyEvent(display, keycode1, false, 0); 

XFlush(display); 
} 

j'utilisais la mauvaise macro

+1

cela m'a aidé avec mes remerciements d'application! – eqzx