2014-09-13 3 views
1

есть ли способы нажать клавиши мышь/клавиатура с sdl в C?SDL C мышь/клавиатура выход

если да, как?

Если нет, знаете ли вы какие-либо способы сделать это в C?

+0

мышь/клавиатура * мощность *? Вы пытаетесь отправить синтезированные события мыши/клавиатуры в другую программу, подобно вещам, таким как [AutoHotkey] (http://en.wikipedia.org/wiki/AutoHotkey)? – genpfault

ответ

3

Создание SDL_event структуры и заполнить поля, как описано в http://wiki.libsdl.org/SDL_KeyboardEvent и http://wiki.libsdl.org/SDL_Keysym затем использовать SDL_Pushevent() поместить событие в очередь событий: http://wiki.libsdl.org/SDL_PushEvent

SDL_Event event; 

event.type = SDL_KEYDOWN; 
event.timestamp = lastEvent.timestamp + 1; 
event.windowID - lastEvent.windowID; 
event.state = SDL_PRESSED; 

event.keysym.scancode = SDL_SCANCODE_ESCAPE; // from SDL_Keysym 
event.keysym.sym = SDLK_ESCAPE; 
event.keysym.mod = 0; // from SDL_Keymod 

SDL_PushEvent(&Event) // Inject key press of the Escape Key 

сделать то же самое для любого другого события в SDL_Event, включая события мыши: http://wiki.libsdl.org/SDL_MouseButtonEvent

0

Эта программа демонстрирует, как читать ввод мыши и клавиатуры в программе SDL. Он будет работать в течение нескольких секунд и отображать «стрелку вверх» или «стрелку вниз» при нажатии любой из этих клавиш и отображать «щелчок мышью» и координаты при нажатии мыши.

#include "SDL2/SDL.h" 
#include <stdlib.h> 

int main(){ 
    SDL_Init(SDL_INIT_VIDEO); 
    SDL_Window *window = SDL_CreateWindow("Keyboard and mouse input", 
         SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 
         500, 500, SDL_WINDOW_SHOWN); 
    int i; 
    for (i = 0; i< 3000; i++){ 
     SDL_UpdateWindowSurface(window); 
     SDL_Event event; 
     while (SDL_PollEvent(&event)){//this is where the important stuff happens: 
      if(event.type == SDL_KEYDOWN) { 
       switch(event.key.keysym.sym) { 
        case SDLK_UP: 
         puts("up arrow"); 
         break; 
        case SDLK_DOWN://for full list of key names, http://www.libsdl.org/release/SDL-1.2.15/docs/html/sdlkey.html 
         puts("down arrow"); 
         break; 
       } 
      } 
      else if (event.type == SDL_MOUSEBUTTONDOWN){ 
       int x, y; 

       SDL_GetMouseState(&x,&y); 
       printf("%s button mouse clicked at: (%d,%d)\n", 
        (event.button.button == SDL_BUTTON_LEFT)? "left" : "right", 
        x,y); 
      } 
     } 
     SDL_Delay(1); 
    } 
    SDL_DestroyWindow(window); 
    SDL_Quit(); 
} 

это для SDL версии 2

в основном, вам нужно позвонить SDL_PollEvent, а затем проверить результат SDL_Event struct для получения информации о том, была ли это клавиатура или мышь событие, и если да, где мышь была или какая кнопка нажата.

1

С SDL 2.0.3 SDL не поддерживает отправку событий ввода в другие приложения. В Windows вы можете использовать the SendInput function для отправки событий ввода в другие приложения. С X11 вы можете использовать the xcb_send_event function. Я не уверен в OS X, iOS или Android.

Смежные вопросы