use keyboard_codes::{
current_platform, parse_keyboard_input, parse_shortcut_with_aliases, Key, KeyCodeMapper,
Modifier, Shortcut,
};
fn main() {
println!("=== 宏系统示例 ===\n");
let platform = current_platform();
println!("当前平台: {}\n", platform);
println!("宏录制概念演示:");
let macro_steps = [
("输入文本", "Hello", MacroActionType::Text),
("快捷键", "ctrl+a", MacroActionType::Shortcut),
("快捷键", "ctrl+c", MacroActionType::Shortcut),
("导航", "arrowdown", MacroActionType::SingleKey),
("快捷键", "ctrl+v", MacroActionType::Shortcut),
("功能键", "f5", MacroActionType::SingleKey),
("修饰键", "shift", MacroActionType::SingleKey),
];
for (i, (action, input, action_type)) in macro_steps.iter().enumerate() {
println!(" 步骤 {}: {} -> '{}'", i + 1, action, input);
match action_type {
MacroActionType::Text => {
println!(" -> 文本输入: '{}'", input);
for ch in input.chars() {
if let Ok(keyboard_input) = parse_keyboard_input(&ch.to_string()) {
let vk_code = keyboard_input.to_code(platform);
println!(
" 字符 '{}' -> {} (VK: 0x{:02X})",
ch, keyboard_input, vk_code
);
}
}
}
MacroActionType::Shortcut => {
match parse_shortcut_with_aliases(input) {
Ok(shortcut) => {
let modifier_codes: Vec<String> = shortcut
.modifiers
.iter()
.map(|m| format!("0x{:02X}", m.to_code(platform)))
.collect();
let key_code = shortcut.key.to_code(platform);
println!(
" -> 快捷方式: {} (修饰键: {:?}, 主键: 0x{:02X})",
shortcut, modifier_codes, key_code
);
}
Err(e) => {
println!(" -> 解析失败: {}", e);
}
}
}
MacroActionType::SingleKey => {
match parse_keyboard_input(input) {
Ok(keyboard_input) => {
let vk_code = keyboard_input.to_code(platform);
println!(" -> {} (VK: 0x{:02X})", keyboard_input, vk_code);
}
Err(e) => {
println!(" -> 解析失败: {}", e);
}
}
}
}
}
println!("\n宏回放概念演示:");
let playback_macro = vec![
MacroStep::Shortcut(parse_shortcut_with_aliases("ctrl+a").unwrap()),
MacroStep::Shortcut(parse_shortcut_with_aliases("ctrl+c").unwrap()),
MacroStep::Key(Key::ArrowDown),
MacroStep::Shortcut(parse_shortcut_with_aliases("ctrl+v").unwrap()),
];
for (i, step) in playback_macro.iter().enumerate() {
println!(" 执行步骤 {}: {}", i + 1, step);
}
println!("\n示例完成!");
}
#[derive(Debug)]
enum MacroActionType {
Text,
Shortcut,
SingleKey,
}
#[derive(Debug)]
enum MacroStep {
Key(Key),
#[allow(dead_code)]
Modifier(Modifier),
Shortcut(Shortcut),
#[allow(dead_code)]
Text(String),
}
impl std::fmt::Display for MacroStep {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
MacroStep::Key(key) => write!(f, "按键: {}", key),
MacroStep::Modifier(modifier) => write!(f, "修饰键: {}", modifier),
MacroStep::Shortcut(shortcut) => write!(f, "快捷方式: {}", shortcut),
MacroStep::Text(text) => write!(f, "文本: '{}'", text),
}
}
}