我会使用ncurses,但我希望它能在Windows上运行。在C ++中,我可以使用来自conio的kbhit()
和getch()
来首先检查是否按下了一个字符,然后获取它。
我想在Rust中有类似的东西。
答案 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");
}