нужна помощь для создания нажатий клавиш в существующем приложении в среде Linux с использованием C ++ - PullRequest
1 голос
/ 13 декабря 2010

Мне нужна помощь для создания нажатий клавиш в моем существующем приложении в среде LINUX. Я полностью осознаю, что в Dev C ++ есть библиотеки, которые делают именно то, что я хочу, но в Windows, и мне нужно нечто подобное в Linux. Я много гуглил, но не смог найти решения. Ниже приведен код библиотеки Dev C ++, и я хочу что-то подобное в Linux. Любая помощь, предложение, критика приветствуются.

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));  
}  

Спасибо и всего наилучшего, SamPrat

1 Ответ

1 голос
/ 13 декабря 2010

Что вам нужно, это создать и инициализировать XKeyEvent struct и отправить ее с XSendEvent.

Обязательно проверьте man xkeyevent и man xsendevent

С 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;

Чтобы получить ключевые коды ключей, отметьте /usr/include/X11/keysymdef.h или просто используйте xev

Я нашел краткое введение для вас .

(Редактировать: Кажется кто-то уже решил уже :))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...