macro_system/
macro_system.rs

1//! 宏系统示例
2//! 运行: cargo run --example macro_system
3
4use keyboard_codes::{
5    current_platform, parse_keyboard_input, parse_shortcut_with_aliases, Key, KeyCodeMapper,
6    Modifier, Shortcut,
7};
8
9fn main() {
10    println!("=== 宏系统示例 ===\n");
11
12    let platform = current_platform();
13    println!("当前平台: {}\n", platform);
14
15    // 演示宏录制概念
16    println!("宏录制概念演示:");
17
18    // 定义一些宏步骤 - 修复解析问题
19    let macro_steps = [
20        ("输入文本", "Hello", MacroActionType::Text),
21        ("快捷键", "ctrl+a", MacroActionType::Shortcut),
22        ("快捷键", "ctrl+c", MacroActionType::Shortcut),
23        ("导航", "arrowdown", MacroActionType::SingleKey),
24        ("快捷键", "ctrl+v", MacroActionType::Shortcut),
25        ("功能键", "f5", MacroActionType::SingleKey),
26        ("修饰键", "shift", MacroActionType::SingleKey),
27    ];
28
29    for (i, (action, input, action_type)) in macro_steps.iter().enumerate() {
30        println!("  步骤 {}: {} -> '{}'", i + 1, action, input);
31
32        match action_type {
33            MacroActionType::Text => {
34                // 文本输入 - 分解为单个字符
35                println!("      -> 文本输入: '{}'", input);
36                for ch in input.chars() {
37                    if let Ok(keyboard_input) = parse_keyboard_input(&ch.to_string()) {
38                        let vk_code = keyboard_input.to_code(platform);
39                        println!(
40                            "        字符 '{}' -> {} (VK: 0x{:02X})",
41                            ch, keyboard_input, vk_code
42                        );
43                    }
44                }
45            }
46            MacroActionType::Shortcut => {
47                // 快捷方式解析
48                match parse_shortcut_with_aliases(input) {
49                    Ok(shortcut) => {
50                        let modifier_codes: Vec<String> = shortcut
51                            .modifiers
52                            .iter()
53                            .map(|m| format!("0x{:02X}", m.to_code(platform)))
54                            .collect();
55                        let key_code = shortcut.key.to_code(platform);
56                        println!(
57                            "      -> 快捷方式: {} (修饰键: {:?}, 主键: 0x{:02X})",
58                            shortcut, modifier_codes, key_code
59                        );
60                    }
61                    Err(e) => {
62                        println!("      -> 解析失败: {}", e);
63                    }
64                }
65            }
66            MacroActionType::SingleKey => {
67                // 单个键解析
68                match parse_keyboard_input(input) {
69                    Ok(keyboard_input) => {
70                        let vk_code = keyboard_input.to_code(platform);
71                        println!("      -> {} (VK: 0x{:02X})", keyboard_input, vk_code);
72                    }
73                    Err(e) => {
74                        println!("      -> 解析失败: {}", e);
75                    }
76                }
77            }
78        }
79    }
80
81    // 演示宏回放概念
82    println!("\n宏回放概念演示:");
83
84    let playback_macro = vec![
85        MacroStep::Shortcut(parse_shortcut_with_aliases("ctrl+a").unwrap()),
86        MacroStep::Shortcut(parse_shortcut_with_aliases("ctrl+c").unwrap()),
87        MacroStep::Key(Key::ArrowDown),
88        MacroStep::Shortcut(parse_shortcut_with_aliases("ctrl+v").unwrap()),
89    ];
90
91    for (i, step) in playback_macro.iter().enumerate() {
92        println!("  执行步骤 {}: {}", i + 1, step);
93    }
94
95    println!("\n示例完成!");
96}
97
98#[derive(Debug)]
99enum MacroActionType {
100    Text,
101    Shortcut,
102    SingleKey,
103}
104
105#[derive(Debug)]
106enum MacroStep {
107    Key(Key),
108    #[allow(dead_code)]
109    Modifier(Modifier),
110    Shortcut(Shortcut),
111    #[allow(dead_code)]
112    Text(String),
113}
114
115impl std::fmt::Display for MacroStep {
116    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
117        match self {
118            MacroStep::Key(key) => write!(f, "按键: {}", key),
119            MacroStep::Modifier(modifier) => write!(f, "修饰键: {}", modifier),
120            MacroStep::Shortcut(shortcut) => write!(f, "快捷方式: {}", shortcut),
121            MacroStep::Text(text) => write!(f, "文本: '{}'", text),
122        }
123    }
124}