tauri实用教程:阻止除控制台关闭程序外的全部手动关闭
效果预览
当尝试关闭程序时
第一步设置监听事件用于监听窗口关闭,并拦截
// Prevents additional console window on Windows in release, DO NOT REMOVE!!
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
use tauri::{api::dialog::confirm};fn main() {println!("🔄 启动Tauri应用...");tauri::Builder::default().on_window_event(|event| { // 从这里开始match event.event() {tauri::WindowEvent::CloseRequested { api, .. } => {//阻止默认关闭api.prevent_close();let window = event.window().clone();confirm(Some(&window.clone()),"提示","你确定要退出应用吗?",move |answer| {if answer {let _ = window.close();}},);}_ => {} //todo}}).invoke_handler(tauri::generate_handler![]).run(tauri::generate_context!()).expect("error while running tauri application");
}
第二步设置前端无边框时的触发事件的方法,如果没有设置无边框则不需要
// Prevents additional console window on Windows in release, DO NOT REMOVE!!
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
use tauri::{api::dialog::confirm, Manager};use crate::setup::setup_handler::close_window_event;
mod driver;
mod invoke_handler;
mod setup;fn main() {println!("🔄 启动Tauri应用...");tauri::Builder::default().setup(|app| {close_window_event(app); // 新增关闭触发事件Ok(())}).on_window_event(|event| {match event.event() {tauri::WindowEvent::CloseRequested { api, .. } => {//阻止默认关闭api.prevent_close();let window = event.window().clone();confirm(Some(&window.clone()),"提示","你确定要退出应用吗?",move |answer| {if answer {let _ = window.close();}},);}_ => {} //todo}}).invoke_handler(tauri::generate_handler![]).run(tauri::generate_context!()).expect("error while running tauri application");
}
第三部前端设置
// windows.ts
// TODO 窗口放大缩小
import { emit } from "@tauri-apps/api/event";
import { appWindow } from "@tauri-apps/api/window";
export const min = () => {appWindow.minimize()
}
export const max = () => {appWindow.toggleMaximize();
}
export const close_windows = async () => {await emit('window-close-request')
}