提问人:Gewi 提问时间:8/28/2023 最后编辑:Chayim FriedmanGewi 更新时间:8/31/2023 访问量:56
Rust 上窗口的钥匙钩
Key hook for window on Rust
问:
你能帮忙解决事件捕捉问题吗? 我有一个窗口,如果窗口现在未处于聚焦状态,我想捕获键盘事件。 对于它在覆盖构造函数中,我使用如下:
let (button_sender, button_receiver) = mpsc::channel(10000);
match keylogger::install_hook(Box::new(move |button| {
println!("press {}", button);
let button_sender1 = button_sender.clone();
tokio::spawn(async move {
println!("tokio::spawn");
button_sender1.send(button).await.unwrap();
});
})) {
Ok(..) => {
#[cfg(debug_assertions)]
println!("Hook installed");
}
Err(e) => {
eprintln!("{}", e);
}
};
之后,在事件循环中,我检查了何时按下键:
custom_window_frame(ctx, |ui| {
let pressed_button: KeyboardButton = match self.button_receiver.try_recv() {
Ok(button) => {
dbg!(button);
button
}
Err(_) => KeyboardButton::Undefined,
};
在我签入键后,例如但是如果我的窗口没有聚焦并且我尝试使用,例如 Esc 或 F12,我会看到下一个错误:if pressed_button == KeyboardButton::F12
thread 'main' has overflowed its stack
error: process didn't exit successfully: `target\debug\live-translator-rs.exe` (exit code: 0xc000041d)
也许有人和 tokio 一起工作过,也许有人知道我做错了什么。谢谢。
有趣的是,当我尝试捕捉鼠标移动事件时,当窗口聚焦时,一切正常。但是当焦点丢失时,事件只是停止做某事,没有任何线程溢出错误。
答: 暂无答案
评论