2015-11-11 1 views
0

J'essaye d'obtenir que mon application C exécute certaines tâches quand on appuie sur le bouton ctrl + k (OU CTRL SHIFT K pas encore sûr), la documentation est un peu scscale mais j'ai pu trouver un cpp exemple et a essayé d'imiter ce code:raccourcis clavier globaux utilisant xlib

Display* dpy = XOpenDisplay(0); 
    Window root = DefaultRootWindow(dpy); 
    XEvent ev; 
    unsigned int modifiers = ControlMask | ShiftMask; 
    int keycode = 45; 
    int pointer_mode = GrabModeAsync; 
    int keyboard_mode = GrabModeAsync; 
    XGrabKey(dpy, keycode, modifiers, root, 0, pointer_mode, keyboard_mode); 
    XSelectInput(dpy, root, KeyPressMask); 
    while(0) 
    { 
    XNextEvent(dpy, &ev); 
    if (ev.type == KeyPress) 
     printf("key has been pressed\n"); 
    } 

Je comprends les touches de clavier sont capturés par la fonction XGrabKey, l'événement xnext lit l'événement et storees que ev, qui je compare le type à la pression de touche XEvent tapez, le message ne s'imprime pas, j'ai essayé ctrl + k et shift + k et ctrl + shift + k

+1

La boucle de votre programme est-elle vraiment 'while (0)'? – duskwuff

+0

n'est-ce pas supposé continuer à lire les événements? À l'infini? –

+0

Je viens de le remarquer !!!!! –

Répondre

1

Vous n'appelez jamais XNextEvent(), parce qu'un while(0) La boucle ne s'exécute jamais. (Ce que vous vouliez probablement dire était while(1)!)

+0

Je n'ai pas remarqué :(merci –