use tauri::{ menu::{CheckMenuItem, Menu, MenuItem, PredefinedMenuItem}, tray::{MouseButton, MouseButtonState, TrayIconBuilder, TrayIconEvent}, Emitter, Listener, Manager, Runtime, }; use crate::tool::powerplan::PowerPlanMode; pub fn create_tray(app: &tauri::AppHandle) -> tauri::Result<()> { // 托盘菜单项目 let separator = &PredefinedMenuItem::separator(app).unwrap(); let show_i = &MenuItem::with_id(app, "show", "显示主界面", true, None::<&str>)?; let quit_i = &MenuItem::with_id(app, "quit", "退出", true, None::<&str>)?; let kill_game_i = &MenuItem::with_id(app, "kill_game", "关闭CS2", true, None::<&str>)?; let kill_steam_i = &MenuItem::with_id(app, "kill_steam", "关闭Steam", true, None::<&str>)?; let launch_ww_i = &MenuItem::with_id(app, "launch_ww", "启动国际服", true, None::<&str>)?; let launch_pw_i = &MenuItem::with_id(app, "launch_pw", "启动国服", true, None::<&str>)?; let power_plan_extreme = CheckMenuItem::with_id( app, "power_plan_extreme", "卓越性能", true, false, None::<&str>, )?; let power_plan_high = CheckMenuItem::with_id(app, "power_plan_high", "高性能", true, false, None::<&str>)?; let power_plan_balanced = CheckMenuItem::with_id( app, "power_plan_balanced", "平衡", true, false, None::<&str>, )?; let power_plan_powersave = CheckMenuItem::with_id( app, "power_plan_powersave", "节能", true, false, None::<&str>, )?; let current_launch_option = MenuItem::with_id( app, "current_launch_option", "启动项档位", true, None::<&str>, )?; // 创建托盘菜单 let menu = Menu::with_items( app, &[ &power_plan_extreme, &power_plan_high, &power_plan_balanced, &power_plan_powersave, separator, ¤t_launch_option, launch_ww_i, launch_pw_i, separator, kill_game_i, kill_steam_i, separator, show_i, quit_i, ], )?; let _ = app.listen("tray://get_powerplan", move |event| { if let Ok(payload) = event.payload().parse::() { match payload { x if x == PowerPlanMode::Other as i32 => { let _ = power_plan_powersave.set_checked(false); let _ = power_plan_balanced.set_checked(false); let _ = power_plan_high.set_checked(false); let _ = power_plan_extreme.set_checked(false); } x if x == PowerPlanMode::PowerSaving as i32 => { let _ = power_plan_powersave.set_checked(true); let _ = power_plan_balanced.set_checked(false); let _ = power_plan_high.set_checked(false); let _ = power_plan_extreme.set_checked(false); } x if x == PowerPlanMode::Balanced as i32 => { let _ = power_plan_powersave.set_checked(false); let _ = power_plan_balanced.set_checked(true); let _ = power_plan_high.set_checked(false); let _ = power_plan_extreme.set_checked(false); } x if x == PowerPlanMode::HighPerformance as i32 => { let _ = power_plan_powersave.set_checked(false); let _ = power_plan_balanced.set_checked(false); let _ = power_plan_high.set_checked(true); let _ = power_plan_extreme.set_checked(false); } x if x == PowerPlanMode::Extreme as i32 => { let _ = power_plan_powersave.set_checked(false); let _ = power_plan_balanced.set_checked(false); let _ = power_plan_high.set_checked(false); let _ = power_plan_extreme.set_checked(true); } _ => {} } } }); let _ = app.listen("tray://get_current_launch_option", move |event| { let payload = event.payload(); if payload != "" { let _ = current_launch_option.set_text("启动项档位 ".to_string() + payload); } }); let _ = TrayIconBuilder::with_id("tray") .icon(app.default_window_icon().unwrap().clone()) .menu(&menu) .show_menu_on_left_click(false) .on_menu_event(move |app, event| match event.id.as_ref() { "quit" => { app.exit(0); } "show" => { if let Some(window) = app.get_webview_window("main") { let _ = window.show(); let _ = window.set_focus(); } } "launch_ww" => { let _ = app.emit("tray://launch_game", "worldwide"); } "launch_pw" => { let _ = app.emit("tray://launch_game", "perfectworld"); } "kill_game" => { let _ = app.emit("tray://kill_game", None::<()>); } "kill_steam" => { let _ = app.emit("tray://kill_steam", None::<()>); } "power_plan_extreme" => { let _ = app.emit("tray://set_powerplan", PowerPlanMode::Extreme as i32); // let _ = power_plan_extreme.set_checked(true); } "power_plan_high" => { let _ = app.emit( "tray://set_powerplan", PowerPlanMode::HighPerformance as i32, ); // let _ = power_plan_high.set_checked(true); } "power_plan_balanced" => { let _ = app.emit("tray://set_powerplan", PowerPlanMode::Balanced as i32); // let _ = power_plan_balanced.set_checked(true); } "power_plan_powersave" => { let _ = app.emit("tray://set_powerplan", PowerPlanMode::PowerSaving as i32); // let _ = power_plan_powersave.set_checked(true); } _ => {} }) .on_tray_icon_event(|tray, event| { if let TrayIconEvent::Click { button: MouseButton::Left, button_state: MouseButtonState::Up, .. } = event { let app = tray.app_handle(); if let Some(window) = app.get_webview_window("main") { let _ = window.show(); let _ = window.set_focus(); } } }) .build(app); Ok(()) }