All Projects → mohabouje → Wintoast

mohabouje / Wintoast

Licence: mit
WinToast is a lightly library written in C++ which brings a complete integration of the modern toast notifications of Windows 8 & Windows 10. Toast notifications allows your app to inform the users about relevant information and timely events that they should see and take action upon inside your app, such as a new instant message, a new friend request, breaking news, or a calendar event.

Projects that are alternatives of or similar to Wintoast

Burnttoast
Module for creating and displaying Toast Notifications on Microsoft Windows 10.
Stars: ✭ 796 (+159.28%)
Mutual labels:  notifications, windows-10
Ismessages
This is simple extension for presenting system-wide notifications from top/bottom of device screen.
Stars: ✭ 299 (-2.61%)
Mutual labels:  notifications
Breadplayer
Bread Player, a free and open source music player powered by UWP and C#/.NET with a sleek and polished design built for, and by, the people seeking a better alternative to Groove and Windows Media Player by Microsoft.
Stars: ✭ 267 (-13.03%)
Mutual labels:  windows-10
Gander
Gander is a simple in-app HTTP inspector for Android OkHttp clients. Gander intercepts and persists all HTTP requests and responses inside your application, and provides a UI for inspecting their content.
Stars: ✭ 285 (-7.17%)
Mutual labels:  notifications
Travis Ci Discord Webhook
⛓ Here's your serverless solution for sending build status from Travis CI to Discord as webhooks.
Stars: ✭ 273 (-11.07%)
Mutual labels:  notifications
Woeusb Ng
WoeUSB-ng is a simple tool that enable you to create your own usb stick windows installer from an iso image or a real DVD. This is a rewrite of original WoeUSB.
Stars: ✭ 279 (-9.12%)
Mutual labels:  windows-10
Windows 10 Sophia Script
⚡ The most powerful PowerShell module on GitHub for Windows 10 & Windows 11 fine-tuning and tweaking
Stars: ✭ 4,133 (+1246.25%)
Mutual labels:  windows-10
Glnotificationbar
GLNotificationBar is a ios10 style notification bar, can be used to handle push notification in active state.
Stars: ✭ 306 (-0.33%)
Mutual labels:  notifications
Ftindicator
A light wight UI package contains local notification, progress HUD, toast, with blur effect, elegant API and themes support.
Stars: ✭ 292 (-4.89%)
Mutual labels:  notifications
Fedora Remix For Wsl
Fedora Remix for Windows Subsystem for Linux.
Stars: ✭ 284 (-7.49%)
Mutual labels:  windows-10
Houston
Apple Push Notifications; No Dirigible Required
Stars: ✭ 2,973 (+868.4%)
Mutual labels:  notifications
Sylphyhorn
Virtual Desktop Tools for Windows 10.
Stars: ✭ 271 (-11.73%)
Mutual labels:  windows-10
Awesome Wsl
Awesome list dedicated to Windows Subsystem for Linux
Stars: ✭ 3,544 (+1054.4%)
Mutual labels:  windows-10
Artoolkitx
artoolkitX
Stars: ✭ 272 (-11.4%)
Mutual labels:  windows-10
Emax64
64-bit Emacs for Windows with ImageMagick 7
Stars: ✭ 301 (-1.95%)
Mutual labels:  windows-10
Anspress
AnsPress is the most complete question and answer system for WordPress. AnsPress is made with developers in mind, highly customizable. AnsPress provide an easy to use override system for theme
Stars: ✭ 264 (-14.01%)
Mutual labels:  notifications
Lottieuwp
UWP port of Lottie(https://github.com/airbnb/lottie-android)
Stars: ✭ 276 (-10.1%)
Mutual labels:  windows-10
Awesome
💻 🎉 An awesome & curated list of best applications and tools for Windows.
Stars: ✭ 17,587 (+5628.66%)
Mutual labels:  windows-10
Ng Snotify
Angular 2+ Notification Center
Stars: ✭ 304 (-0.98%)
Mutual labels:  notifications
Gitify
GitHub notifications on your menu bar. Available on macOS, Windows & Linux.
Stars: ✭ 3,543 (+1054.07%)
Mutual labels:  notifications

releases issues license GitHub contributors built dowloads

GitHub forks GitHub stars GitHub watchers


WinToast

WinToast is a lightly library written in C++ which brings a complete integration of the modern toast notifications of Windows 8 & Windows 10.

Toast notifications allows your app to inform the users about relevant information and timely events that they should see and take action upon inside your app, such as a new instant message, a new friend request, breaking news, or a calendar event.

Toast Templates

WinToast integrates all standard templates available in the ToastTemplateType enumeration.

Template Description Example
ImageAndText01 A large image and a single string wrapped across three lines of text. enter image description here
ImageAndText02 A large image, one string of bold text on the first line, one string of regular text wrapped across the second and third lines. 12
ImageAndText03 A large image, one string of bold text wrapped across the first two lines, one string of regular text on the third line. enter image description here
ImageAndText04 A large image, one string of bold text on the first line, one string of regular text on the second line, one string of regular text on the third line. enter image description here
Text01 Single string wrapped across three lines of text. enter image description here
Text02 One string of bold text on the first line, one string of regular text wrapped across the second and third lines. enter image description here
Text03 One string of bold text wrapped across the first two lines, one string of regular text on the third line. enter image description here
Text04 One string of bold text on the first line, one string of regular text on the second line, one string of regular text on the third line. enter image description here

Example of a ImageAndText02 template:

WinToastTemplate templ = WinToastTemplate(WinToastTemplate::ImageAndText02);
templ.setTextField(L"title", WinToastTemplate::FirstLine);
templ.setTextField(L"subtitle", WinToastTemplate::SecondLine);
templ.setImagePath(L"C:/example.png"); 

Note: The user can use the default system sound or specify a sound to play when a toast notification is displayed. Same behavior for the toast notification image, by default Windows try to use the app icon.*

Event Handler

WinToast handle different events:

  • Activated: Occurs when user activates a toast notification through a click or touch. Apps that are running subscribe to this event
  • Dismissed: Occurs when a toast notification leaves the screen, either by expiring or being explicitly dismissed by the user.
    • Application Hidden: The application hid the toast using ToastNotifier.hide.
    • User Canceled: The user dismissed the toast.
    • Timed Out: The toast has expired
  • Failed: Occurs when an error is caused when Windows attempts to raise a toast notification.

Create your custom handler to interact with the user actions by subclassing the interface IWinToastHandler:

class WinToastHandlerExample : public IWinToastHandler {
 public:
	WinToastHandlerExample(); 
	// Public interfaces
	void toastActivated() const override;
	void toastDismissed(WinToastDismissalReason state) const override;
	void toastFailed() const override;
 };

Expiration Time

Set the time after which a toast notification is no longer considered current or valid and should not be displayed. Windows attempts to raise toast notifications immediately after you call Show, so this property is rarely used.

For Windows 8.x app, this property also causes the toast notification to be removed from the Action Center once the specified data and time is reached.

Note: Default Windows behavior is to hide notification automatically after time set in Windows Ease of Access Settings. If you need to preserve notification in Windows Action Center for longer period of time, you have to call WinToastTemplate::setExpiration method.

Additional features available on Windows 10

If your system supports the new modern features (Version > Windows 8.1) available in Windows 10, you can add some interesting fields as:

  • Actions: you can add your own actions, this fact allow you to interact with user in a different way:
WinToastTemplate templ = WinToastTemplate(WinToastTemplate::Text02);
templ.setTextField(L"Do you think this feature is cool?", WinToastTemplate::FirstLine);
templ.setTextField(L"Ofc,it is!", WinToastTemplate::SecondLine);

std::vector<std::wstring> actions;
actions.push_back(L"Yes");
actions.push_back(L"No");
for (auto const &action : actions)	
    templ.addAction(action);
WinToast::instance()->showToast(templ, handler) 

"Toast with some actions"

  • Attribution text: you can add/remove the attribution text, by default is empty. Use WinToastTemplate::setAttributionText to modify it.
  • Duration: The amount of time the toast should display. This attribute can have one of the following values: - System: default system configuration.
    • Short: default system short time configuration.
    • Long: default system long time configuration.
  • Audio Properties: you can modify the different behaviors of the sound:
    • Default: plays the audio file just one time.
    • Silent: turn off the sound.
    • Loop: plays the given sound in a loop during the toast existence.

WinToast allows the modification of the default audio file. Add the given file in to your projects resources (must be ms-appx:// or ms-appdata:// path) and define it by calling: WinToastTemplate::setAudioPath

By default, WinToast checks if your systems support the features, ignoring the not supported ones.

Error Handling

There are several reasons WinToast can fail that's why the library notifies caller about fail reason. Those are the code for each failure:

WinToastError Error Code Error message
NoError 0x00 No error. The process was executed correctly
NotInitialized 0x01 The library has not been initialized
SystemNotSupported 0x02 The OS does not support WinToast
ShellLinkNotCreated 0x03 The library was not able to create a Shell Link for the app
InvalidAppUserModelID 0x04 The AUMI is not a valid one
InvalidParameters 0x05 The parameters used to configure the library are not valid normally because an invalid AUMI or App Name
NotDisplayed 0x06 The toast was created correctly but WinToast was not able to display the toast
UnknownError 0x07 Unknown error

A common example of usage is to check while initializing the library or showing a toast notification the possible failure code:

WinToast::WinToastError error;
const bool succedded = WinToast::instance()->initialize(&error);
if (!succedded) {  
    std::wcout << L"Error, could not initialize the lib. Error number: " 
    << error << std::endl;
}
...
// Configure the template
...
const bool launched = WinToast::instance()->showToast(templ, handler, &error);
if (!launched) {
    std::wcout << L"Error: Could not launch your toast notification. Error: "
     << error << std::endl;
}

Example of Usage

For an easy usage, you can just use the available singleton instance.

First step, Import the header file wintoastlib.h to your project. You should check if your Windows Version is supported by the library.

using namespace WinToastLib;
....
if (!WinToast::isCompatible()) {
    std::wcout << L"Error, your system in not supported!" << std::endl;
}

Configure your App User Model Id, this can be done by using the existing helper:

WinToast::instance()->setAppName(L"WinToastExample");
const auto aumi = WinToast::configureAUMI(L"mohabouje", L"wintoast", L"wintoastexample", L"20161006");
WinToast::instance()->setAppUserModelId(aumi);	

Initialize all the dependencies and check if WinToast has been initialized successfully in your system:

if (!WinToast::instance()->initialize()) {
  std::wcout << L"Error, could not initialize the lib!" << std::endl;
}

Implement your own action handler by subclassing the interface IWinToastHandler and custom your template:

WinToastHandlerExample* handler = new WinToastHandlerExample;
WinToastTemplate templ = WinToastTemplate(WinToastTemplate::ImageAndText02);
templ.setImagePath(L"C:/example.png");
templ.setTextField(L"title", WinToastTemplate::FirstLine);
templ.setTextField(L"subtitle", WinToastTemplate::SecondLine);

Finally show the results:

if (!WinToast::instance()->showToast(templ, handler)) {
    std::wcout << L"Error: Could not launch your toast notification!" << std::endl;
}

Installation

If you are using a package manager, there is a port for vcpkg. Otherwise, the easiest way is to copy the source files as external dependencies.

Toast configuration on Windows 10

Windows allows the configuration of the default behavior of a toast notification. This can be done in the Ease of Access configuration by modifying the Other options tab.

The system configuration helps you to define how long you want notifications to appear for (5 seconds to 5 minutes) as turning on visual notifications for sound.

Ease of Access configuration

Projects using WinToast

  • Git for Windows: A fork of Git containing Windows-specific patches.
  • QGIS: QGIS is a free, open source, cross platform (lin/win/mac) geographical information system (GIS)
  • MEGAsync: Easy automated syncing between your computers and your MEGA Cloud Drive
  • chatterino2: Chat client for twitch.tv
  • nheko: Desktop client for the Matrix protocol.
  • EDPathFinder: A program that creates an optimal route that passes through two or more systems in Elite.
  • AntiExploit: antiexploit utility for Windows.
  • Zroya: Python extension for creating native Windows notifications..
  • PidginWinToastNotifications: Windows Toast Notification Plugin for Pidgin.
  • Dnai-Editor: Visual Scripting, node editor.
  • Spectral: A glossy client for Matrix, written in QtQuick Controls 2 and C++.
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].