我正在try 移除停靠图标,关闭窗口,并使用Tauri让应用程序在后台运行.

我可以关闭窗口,但我不知道如何在窗口关闭后删除应用程序图标.

// Prevents additional console window on Windows in release, DO NOT REMOVE!!
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]

#[tauri::command]
fn greet(name: &str) -> String {
    format!("Hello ->, {}!", name)
}

fn main() {
    tauri::Builder::default()
        .setup(|app| {
            // #[cfg(target_os = "macos")]
            // app.set_activation_policy(tauri::ActivationPolicy::Accessory); // this removes the dock icon by default
            Ok(())
        })
        .build(tauri::generate_context!())
        .expect("error while building tauri application")
        .run(|_app_handle, event| match event {
// dock icon should be removed here, but I don't know how, share the app state?
            tauri::RunEvent::ExitRequested { api, .. } => {
                api.prevent_exit();
            }
            _ => {}
        })
}

推荐答案

Tauri似乎不支持在启动后设置激活策略,但您可以在运行时自行设置(参见注释和编辑为this answer),方法是使用cocoa机箱调用AppKit API:

use cocoa::appkit::{NSApp, NSApplication, NSApplicationActivationPolicy::*};

unsafe {
    let app = NSApp();
    app.setActivationPolicy_(NSApplicationActivationPolicyAccessory);
}

在调用api.prevent_exit()之后立即插入它会导致窗口关闭,停靠图标消失,但程序会继续运行.

值得注意的是,Tauri不希望您这样做,因此它可能会导致其他意外行为--例如,稍后可能很难恢复窗口状态.

Rust相关问答推荐

程序退出后只写入指定管道的数据

当为a Self:IntoIterator设置trait bind `时,获取`a T `不是迭代器"&'"<'>&'

如何编写一个以一个闭包为参数的函数,该函数以另一个闭包为参数?

捕获FnMut闭包的时间不够长

如何点击()迭代器?

正则表达式中的重叠匹配?(铁 rust 正则式发动机)

`Pin`有没有不涉及不安全代码的目的?

获取与父字符串相关的&;str的原始片段

应为关联类型,找到类型参数

为什么比较Option<;字符串>;具有常数Option<&;str>;需要显式类型转换吗?

如何对一个特征的两个实现进行单元测试?

为什么某些类型参数仅在特征边界中使用的代码在没有 PhantomData 的情况下进行编译?

在Rust中实现Trie数据 struct 的更好方式

为什么需要同时为值和引用实现`From`?方法不应该自动解引用或borrow 吗?(2023-06-16)

在线程中运行时,TCPListener(服务器)在 ip 列表中的服务器实例之前没有从客户端接受所有客户端的请求

Rust 引用元组和引用元组

我如何将 google_gmail1::Gmail> 传递给线程生成?

TinyVec 如何与 Vec 大小相同?

您如何使用枚举反序列化字符串,其中任何其他值反序列化为新类型变体同时保留字符串?

在特征中返回一个 Self 类型的值