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

问题描述 投票:3回答:1

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

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

rust
1个回答
0
投票

使用crate device_query,您可以查询键盘状态,而无需活动窗口。您只需要在Cargo.toml文件中添加依赖项到此包:

[dependencies]
device_query = "0.1.0"

用法很简单,类似于kbhit()getch()。不同之处在于你会收到按下键的VecKeycode),如果没有按下按键,这个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");
}
© www.soinside.com 2019 - 2024. All rights reserved.