5 releases

0.1.6 Aug 1, 2024
0.1.5 Jul 26, 2024
0.1.3 May 29, 2024

#205 in GUI

Download history 8/week @ 2024-08-07 5/week @ 2024-08-14 6/week @ 2024-09-11 10/week @ 2024-09-18 50/week @ 2024-09-25 15/week @ 2024-10-02

560 downloads per month
Used in notify-send-win

MIT license

35KB
458 lines

English | 简体中文

win-toast-notiy

win-toast-notify is a Rust library for sending Windows Toast notifications. This library is primarily inspired by the following projects:

This library has been tested on Windows 11.

Important Notice: This library is currently in an unstable state.

Documentation

For detailed usage and API reference, please refer to the documentation.

Changelog

For recent changes and updates, see the CHANGELOG.

Usage

# Cargo.toml
[dependencies]
win-toast-notify = "0.1.6"

Examples

Basic

cargo run --example basic
use win_toast_notify::WinToastNotify;

fn main() {
    WinToastNotify::new()
        .set_title("Title")
        .set_messages(vec![
            "This is a simple toast message"
        ])
        .show()
        .expect("Failed to show toast notification")
}

image

Button

cargo run --example button # button_2
use win_toast_notify::{WinToastNotify, Action, ActivationType};

fn main() {
    WinToastNotify::new()
        .set_actions(vec![
            Action {
                activation_type: ActivationType::Protocol,
                action_content: "Url".to_string(),
                arguments: "https://www.google.com/".to_string(),
                image_url: None
            },
            Action {
                activation_type: ActivationType::Protocol,
                 action_content: "File".to_string(),
                 arguments: r"C:\Windows\Web\Screen\img104.jpg".to_string(),
                 image_url: None
             },
            Action {
                 activation_type: ActivationType::Protocol,
                 action_content: "Folder".to_string(),
                 arguments: r"$env:USERPROFILE\Downloads".to_string(),   // PowerShell supports using environment variables
                 image_url: None
             }
         ])
         .show()
         .expect("Failed to show toast notification");
}

image

image

Advance

cargo run --example advance
use win_toast_notify::*;
use std::env;

fn main() {
    let current_dir = env::current_dir().expect("Failed to get current directory");
    let logo_path = current_dir.join("examples/album_artist.png");
    let image_path = current_dir.join("examples/album_cover.jpg");
    let introduce_url = "https://honkai-star-rail.fandom.com/wiki/Hope_Is_the_Thing_With_Feathers";
    let music_url = "https://t.co/6urFxrI6K0";
    let music_lyric = "https://x.com/honkaistarrail/status/1789149010831569254";

    WinToastNotify::new()
        .set_open(introduce_url)    // 点击通知的打开链接或文件(夹)
        .set_duration(Duration::Long)
        .set_title("Hope Is the Thing With Feathers - Robin")
        .set_messages(vec![
            "Heads up the wheels are spinning\nAcross the plains in valleys deep",
            "To dawn the wheels that sing\nAn unending dream"
        ])
        .set_logo(logo_path.to_str().expect("Path is an invalid unicode"), CropCircle::True)
        .set_image(image_path.to_str().expect("Path is an invalid unicode"), ImagePlacement::Top)
        .set_actions(vec![
            Action {
                activation_type: ActivationType::Protocol,
                action_content: "Listen".to_string(),
                arguments: music_url.to_string(),
                image_url: None,
            },
            Action {
                activation_type: ActivationType::Protocol,
                action_content: "Lyric".to_string(),
                arguments: music_lyric.to_string(),
                image_url: None,
            }
        ])
        .set_audio(Audio::WinLoopingAlarm5, Loop::True)
        .show()
        .expect("Failed to show toast notification")
}

image

Progress Bat

cargo run --example progress_bat_2
use win_toast_notify::{WinToastNotify, CropCircle, Duration};
use std::env;

fn main() {
    let current_dir = env::current_dir().expect("Failed to get current directory");
    let logo_path = current_dir.join("examples/progress_logo.png");

    let tag = "star-rail";
    let title = "Honkai: Star Rail";
    let mut status = String::from("Downloading...");
    let mut value = 0.0;
    let mut value_string = String::from("0%");

    WinToastNotify::new()
        .set_duration(Duration::Long)   
        .set_title("Downloading miHoYo Game...")
        .set_messages(vec![
            "May This Journey Lead Us Starward"
        ])
        .set_logo(logo_path.to_str().expect("Path is an invalid unicode"), CropCircle::True)
        .set_progress(tag, title, &status, value, &value_string)
        .show()
        .expect("Failed to show toast notification");

    for i in 1..=10 {
        std::thread::sleep(std::time::Duration::from_millis(500));
        value = i as f32 / 10.0;
        if i != 10 {
            value_string = format!("{:.1}%", value * 100.0);
            WinToastNotify::progress_update(None, tag, value, &value_string).expect("Failed to update");
        } else {
            status = String::from("Completed");
            value_string = String::from("100%");
            WinToastNotify::progress_complete(None, tag, &status, &value_string).expect("Failed to complete");
        };
    };
}

image

Dependencies

~265KB