native/desktop-win32/src/win32/keyboard_api.rs (28 lines of code) (raw):

use desktop_common::logger::{PanicDefault, ffi_boundary}; use windows::Win32::UI::Input::KeyboardAndMouse::GetKeyState; #[repr(C)] pub struct KeyState { pub is_down: bool, pub is_toggled: bool, } impl PanicDefault for KeyState { fn default() -> Self { Self { is_down: false, is_toggled: false, } } } /// cbindgen:ignore const DOWN_BIT: u16 = 0b1000_0000_0000_0000; // high-order bit /// cbindgen:ignore const TOGGLED_BIT: u16 = 0b0000_0000_0000_0001; // low-order bit #[allow(clippy::cast_sign_loss)] #[unsafe(no_mangle)] pub extern "C" fn keyboard_get_key_state(vkey: i32) -> KeyState { ffi_boundary("keyboard_get_key_state", || { let native_state = unsafe { GetKeyState(vkey) } as u16; let is_down = (native_state & DOWN_BIT) != 0; let is_toggled = (native_state & TOGGLED_BIT) != 0; let key_state = KeyState { is_down, is_toggled }; Ok(key_state) }) }