2010-12-13 23 views
1

J'ai besoin d'aide pour générer des séquences de touches dans mon application existante dans l'environnement LINUX. Je suis pleinement conscient qu'il existe des bibliothèques dans Dev C++ qui font exactement ce que je veux mais dans Windows et j'ai besoin de quelque chose comme ça sous Linux. J'ai beaucoup googlé, mais je n'ai pas trouvé de solution. Voici le code de la bibliothèque Dev C++ et je veux quelque chose comme ça sous Linux. Toute aide, suggestion, critique sont les bienvenues.besoin d'aide pour générer des séquences de touches dans une application existante dans un environnement Linux en utilisant C++

void GenerateKey(int vk , BOOL bExtended) 
{ 
    KEYBDINPUT kb = {0}; 
    INPUT Input = {0}; 

    // generate down 
    if(bExtended) 
    kb.dwFlags = KEYEVENTF_EXTENDEDKEY; 
    kb.wVk = vk;  

    Input.type = INPUT_KEYBOARD; 
    Input.ki = kb; 
    ::SendInput(1, &Input, sizeof(Input)); 
    // generate up  
    ::ZeroMemory(&kb, sizeof(KEYBDINPUT)); 
    ::ZeroMemory(&Input, sizeof(INPUT)); 

    kb.dwFlags = KEYEVENTF_KEYUP; 
    if(bExtended) 
    kb.dwFlags |= KEYEVENTF_EXTENDEDKEY; 

    kb.wVk = vk; 
    Input.type = INPUT_KEYBOARD; 
    Input.ki = kb; 
    ::SendInput(1, &Input, sizeof(Input)); 
} 

Merci et salutations, SamPrat

Répondre

1

Ce que vous voulez est de créer et d'initialiser XKeyEvent struct et l'envoyer avec XSendEvent.

Assurez-vous de vérifier man xkeyevent et man xsendevent

De man xkeyevent:

typedef struct { 
     int type;    /* KeyPress or KeyRelease */ 
     unsigned long serial; /* # of last request processed by server */ 
     Bool send_event;   /* true if this came from a SendEvent request */ 
     Display *display;  /* Display the event was read from */ 
     Window window;   /* ``event'' window it is reported relative to */ 
     Window root;    /* root window that the event occurred on */ 
     Window subwindow;  /* child window */ 
     Time time;    /* milliseconds */ 
     int x, y;    /* pointer x, y coordinates in event window */ 
     int x_root, y_root;  /* coordinates relative to root */ 
     unsigned int state;  /* key or button mask */ 
     unsigned int keycode; /* detail */ 
     Bool same_screen;  /* same screen flag */ 
    } XKeyEvent; 

Pour obtenir keycodes clés, vérifiez /usr/include/X11/keysymdef.h ur il suffit d'utiliser xev

J'ai trouvé un brief introduction pour vous.

(Edit: Il semble déjà someone solved it :))

+0

Merci Palmik, pour une telle réponse rapide, je vais me renseigner. Semble qu'il va résoudre mon problème.Merci beaucoup – samprat

+0

Cher PalmiK, Le code se compile correctement, mais je me demande comment je le testerais pour vérifier si je le fais ou non. – samprat

+0

envoyer des frappes à une fenêtre de l'éditeur de texte – reuscam