如果用户没有按Enter键,我如何获得键盘输入?

时间:2016-02-27 16:07:25

标签: rust

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

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

1 个答案:

答案 0 :(得分:0)

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

[dependencies]
device_query = "0.1.0"

用法很简单,类似于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);
        }
    }
}

此程序将打印出控制台上所有按下的键。要改为仅检查是否按下了任何键(仅与kbhit()类似),可以在返回的is_empty()上使用Vec<>,如下所示:

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