macro_system/
macro_system.rs1use 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 println!("宏录制概念演示:");
17
18 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 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 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 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 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}