diff --git a/src/backend/consumer/windows.rs b/src/backend/consumer/windows.rs
index ffcd112..8971926 100644
--- a/src/backend/consumer/windows.rs
+++ b/src/backend/consumer/windows.rs
@@ -4,14 +4,14 @@ use crate::event::{KeyboardEvent, PointerEvent};
use winapi::{
self,
um::winuser::{INPUT, INPUT_MOUSE, LPINPUT, MOUSEEVENTF_MOVE, MOUSEINPUT,
- MOUSEEVENTF_LEFTDOWN,
- MOUSEEVENTF_RIGHTDOWN,
- MOUSEEVENTF_MIDDLEDOWN,
- MOUSEEVENTF_LEFTUP,
- MOUSEEVENTF_RIGHTUP,
- MOUSEEVENTF_MIDDLEUP,
- MOUSEEVENTF_WHEEL,
- MOUSEEVENTF_HWHEEL,
+ MOUSEEVENTF_LEFTDOWN,
+ MOUSEEVENTF_RIGHTDOWN,
+ MOUSEEVENTF_MIDDLEDOWN,
+ MOUSEEVENTF_LEFTUP,
+ MOUSEEVENTF_RIGHTUP,
+ MOUSEEVENTF_MIDDLEUP,
+ MOUSEEVENTF_WHEEL,
+ MOUSEEVENTF_HWHEEL, INPUT_KEYBOARD, KEYBDINPUT, KEYEVENTF_SCANCODE, KEYEVENTF_KEYUP,
},
};
@@ -89,6 +89,32 @@ fn scroll(axis: u8, value: f64) {
send_mouse_input(mi);
}
+fn key_event(key: u32, state: u8) {
+ let ki = KEYBDINPUT {
+ wVk: 0,
+ wScan: key as u16,
+ dwFlags: KEYEVENTF_SCANCODE | match state {
+ 0 => KEYEVENTF_KEYUP,
+ 1 => 0u32,
+ _ => return
+ },
+ time: 0,
+ dwExtraInfo: 0,
+ };
+ send_keyboard_input(ki);
+}
+
+fn send_keyboard_input(ki: KEYBDINPUT) {
+ unsafe {
+ let mut input = INPUT {
+ type_: INPUT_KEYBOARD,
+ u: Default::default(),
+ };
+ *input.u.ki_mut() = ki;
+ winapi::um::winuser::SendInput(1 as u32, &mut input, std::mem::size_of::() as i32);
+ }
+}
+
pub fn run(event_rx: Receiver<(Event, ClientHandle)>, _clients: Vec) {
loop {
match event_rx.recv().expect("event receiver unavailable").0 {
@@ -101,14 +127,11 @@ pub fn run(event_rx: Receiver<(Event, ClientHandle)>, _clients: Vec) {
rel_mouse(relative_x as i32, relative_y as i32);
}
PointerEvent::Button { time:_, button, state } => { mouse_button(button, state)}
- PointerEvent::Axis { time:_, axis, value } => {
- println!("axis: {axis}, value: {value}");
- scroll(axis, value)
- }
+ PointerEvent::Axis { time:_, axis, value } => { scroll(axis, value) }
PointerEvent::Frame {} => {}
},
Event::Keyboard(keyboard_event) => match keyboard_event {
- KeyboardEvent::Key { .. } => {}
+ KeyboardEvent::Key { time:_, key, state } => { key_event(key, state) }
KeyboardEvent::Modifiers { .. } => {}
},
Event::Release() => {}