есть ли способы нажать клавиши мышь/клавиатура с sdl в C?SDL C мышь/клавиатура выход
если да, как?
Если нет, знаете ли вы какие-либо способы сделать это в C?
есть ли способы нажать клавиши мышь/клавиатура с sdl в C?SDL C мышь/клавиатура выход
если да, как?
Если нет, знаете ли вы какие-либо способы сделать это в 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