在没有用户按下Enter键的情况下如何获得键盘输入?

ca1*_*1ek 5 rust

我会使用ncurses,但希望它在Windows上运行。在C ++中,我可以使用conio kbhit()getch()从conio来首先检查是否按下了字符,然后再获取它。

我想要在Rust中也有类似的东西。

Con*_*tin 5

使用 crate device_query,您可以在不需要活动窗口的情况下查询键盘状态。你只需要在你的Cargo.toml文件中添加对这个板条箱的依赖:

[dependencies]
device_query = "0.1.0"
Run Code Online (Sandbox Code Playgroud)

用法很简单,类似于kbhit()getch()。不同之处在于您将收到一个Vec按下的键 ( Keycode),Vec如果没有按下任何键,它将为空。单个调用涵盖了两者kbhit()getch()组合的功能。

use device_query::{DeviceQuery, DeviceState, Keycode};

fn main() {
    let device_state = DeviceState::new();
    loop {
        let keys: Vec<Keycode> = device_state.get_keys();
        for key in keys.iter() {
            println!("Pressed key: {:?}", key);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

该程序将在控制台上打印出所有按下的键。要改为检查是否按下了任何键(例如kbhit()only),您可以像这样is_empty()在返回的内容上使用Vec<>

let keys: Vec<Keycode> = device_state.get_keys();
if !keys.is_empty(){
    println!("kbhit");
}
Run Code Online (Sandbox Code Playgroud)