SDL C鼠标/键盘输出
答
创建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
答
该程序演示了如何在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
的信息,关于它是否是一个键盘或鼠标事件,如果是这样,其中鼠标是或按了什么按钮。
答
从SDL 2.0.3开始,SDL不支持向其他应用程序发送输入事件。在Windows上,您可以使用the SendInput
function将输入事件发送到其他应用程序。使用X11,您可以使用the xcb_send_event
function。我不确定OS X,iOS或Android。
鼠标/键盘*输出*?您是否尝试将合成的鼠标/键盘事件发送到其他程序,类似于[AutoHotkey](http://en.wikipedia.org/wiki/AutoHotkey)之类的内容? – genpfault 2014-09-15 21:05:08