2014-09-13 87 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的信息,關於它是否是一個鍵盤或鼠標事件,如果是這樣,其中鼠標是或按了什麼按鈕。