app_command/
app_command.rsuse crossbeam_channel::unbounded;
use std::thread;
use win_hotkeys::HotkeyManager;
use win_hotkeys::VKey;
enum AppCommand {
AppCommand1,
AppCommand2,
Exit,
}
fn main() {
let mut hkm = HotkeyManager::new();
let modifiers = &[VKey::LWin, VKey::Shift];
hkm.register_hotkey(VKey::Vk1, modifiers, || {
println!("Pressed WIN + SHIFT + 1");
AppCommand::AppCommand1
})
.unwrap();
hkm.register_hotkey(VKey::Vk2, modifiers, || {
println!("Pressed WIN + SHIFT + 2");
AppCommand::AppCommand2
})
.unwrap();
hkm.register_hotkey(VKey::Vk3, modifiers, || {
println!("Pressed WIN + SHIFT + 3");
AppCommand::Exit
})
.unwrap();
let (tx, rx) = unbounded();
hkm.register_channel(tx);
let handle = hkm.interrupt_handle();
thread::spawn(move || {
hkm.event_loop();
});
loop {
let command = rx.recv().unwrap();
match command {
AppCommand::AppCommand1 => {
println!("Do thing 1");
}
AppCommand::AppCommand2 => {
println!("Do thing 2");
}
AppCommand::Exit => {
println!("Exiting...");
handle.interrupt();
break;
}
}
}
}