2014-09-13 85 views
1

有没有什么办法可以在C中用sdl按键鼠标/键盘?SDL C鼠标/键盘输出

如果是的话,怎么样?

如果不是,你知道有什么方法可以在C中做到吗?

+0

鼠标/键盘*输出*?您是否尝试将合成的鼠标/键盘事件发送到其他程序,类似于[AutoHotkey](http://en.wikipedia.org/wiki/AutoHotkey)之类的内容? – genpfault 2014-09-15 21:05:08

回答

3

创建SDL_event结构和作为记录在http://wiki.libsdl.org/SDL_KeyboardEventhttp://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的信息,关于它是否是一个键盘或鼠标事件,如果是这样,其中鼠标是或按了什么按钮。