2016-05-20 5 views
1

Ist es möglich, Ereignisse im System mit SDL zu überwachen, ohne ein Fenster zu erstellen? Ich möchte, dass meine App auf Ereignisse in einem System hört und wenn bestimmte Verknüpfungen gedrückt werden, erzeuge ich ein Fenster mit der tatsächlichen Benutzeroberfläche.Headless SDL-Ereignisbehandlung

extern crate sdl2; 

fn main() { 
    let ctx = sdl2::init().unwrap(); 

    let mut event_pump = ctx.event_pump().unwrap(); 

    event_pump.pump_events(); 

    for event in event_pump.wait_iter() { 
     match event { 
      _ => { print!("event") } 
     } 
    } 
} 

Wenn dies nicht möglich ist, gibt es eine plattformübergreifende Art und Weise für globale Verknüpfungen zu hören oder ich muß neu implementieren es für jede Plattform selbst?

+0

Warum die SDL-2-Anforderung? Es scheint auch, dass das, was Sie bauen wollen, als Keylogger missbraucht werden könnte. – llogiq

+0

Ich würde froh sein, irgendetwas zu verwenden, um systemweite Verknüpfungsereignisse zu abonnieren, wenn das sicherer wäre. Ich chrose auch sdl2, weil es offensichtlich neuer ist, aber wenn es eine Weise gibt, zu tun, was ich mit sdl1 will, würde ich glücklich sein, zu wechseln –

Antwort

1

Ich habe ähnliche Situation (die Notwendigkeit, Ereignisse zu pumpen/zu verarbeiten, ohne ein Fenster zu erstellen) und von dem, was ich von SDL2-Quellen verstanden habe, ist es derzeit unmöglich, Ereignisse zu pumpen, ohne Videosystem zu initialisieren (mindestens in Version 2.0). 4).

Bitte siehe http://hg.libsdl.org/SDL/file/e12c38730512/src/events/SDL_events.c (ich SDL 2.0.4 verwendet), Funktion SDL_PumpEvents, Zeilen 397-402. Dieser Code prüft, ob das Videosystem initialisiert wurde und ob es Aufrufe PumpEvents Methode für dieses Fenstersystem (ich nehme an, es ruft entsprechende Implementierung für X11/Wayland/etc).

+0

Und selbst wenn ich Videosubsystem erstelle, würde ich nur auf Ereignisse hören können das gehört zu dem zugehörigen Fenster, oder? –

+0

@YurySolovyov Ich kann jetzt nicht sagen, weil es ein gründlicheres Studium der SDL-Quellen erfordert. – user2207361