- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2021-09-11T22:23:32+09:00","","")
#navi(../)
* コンソールプログラムからトースト通知をするサンプル [#da0f9bd0]
コンソールプログラムでトースト通知を実現するサンプルコードがネット上にありましたが~
トースト通知を依頼し(ToastNotifier.Show)、作成したコンソールプログラムが終了すると何も表示されません。~
トースト表示がされる(終わる)まで待たないといけないようです。~
もちろん、Sleepなどを入れれば表示されますが…
本資料では、トースト通知が表示されイベントが戻ってきてコンソールプログラムが終了するようになっています。~
イベントはトースト通知を閉じたり、トースト通知表示後、通知が隠れるとイベントが発生します。
本コンソールプログラムのプロジェクトは以下のURL(GitHub)に公開してあります。~
https://github.com/oss-sakura/Toast4U~
ソースコードは以下の参考記事サイトに公開されているコードを流用させた頂きました。(感謝)
#contents
#htmlinsert(windev-top.html)
* 動作確認&開発環境 [#r260a506]
- Windows 10 ver. 21H1
- Visual Studio 2019
- .NET Framework 4.7.2
* 参考記事 [#j39dafe4]
-Windows10の通知テンプレート(ToastTemplateType)XMLを確認してみた~
https://decodelog.com/net-toast-tamplate/
-C# UWP toast notification event handlers not being called in Release mode. Works in Debug mode~
https://stackoverflow.com/questions/66360108/c-sharp-uwp-toast-notification-event-handlers-not-being-called-in-release-mode
* コンソールプログラムでトースト通知プロジェクトを作る手順 [#y71c4cc6]
コンソールプログラムからトースト通知をするプロジェクトを以下の手順で作成します。
** プロジェクトの作成 [#o588c46c]
+ Visual Studio 2019 の起動します。
+ 新しいプロジェクトの作成 をクリックします。
#ref(01.png)
#br
+ コンソールアプリ(.NET Framework)を選択し「次へ」ボタンをクリックします。
#ref(02.png)
#br
+ プロジェクト名に Toast4U と入力します。
+ 場所は皆さんの環境にあった場所を指定してください。(もちろんデフォルトでもかまいません。)
+ 入力が完了したら「作成」ボタンをクリックします。
#ref(03.png)
#br
+ プロジェクト画面が表示されます。
** WinRTを参照できるようにする [#oa44a2ca]
+ ソリューションエクスプローラーにある「Toast4U」プロジェクトを右クリックします。
+ 「プロジェクトのアンロード」をクリックします。
#ref(04.png)
#br
+ Toast4U.csproj ファイルが表示されます。
#ref(05.png)
#br
+ Toast4U.csproj に以下の文字列を追記します。
<PropertyGroup>
<TargetPlatformVersion>8.0</TargetPlatformVersion>
</PropertyGroup>
35行目~37行目に追記しました。
#ref(06.png)
#br
+ 追記が終わったら、Ctrl + S またはフロッピーディスクのアイコンをクリックし保存します。
#br
+ ソリューションエクスプローラーにある「Toast4U」プロジェクトを右クリックします。
+ 「プロジェクトの再読み込み」をクリックします。
#ref(07.png)
#br
** 必要な参照を追加 [#rf28995c]
+ ソリューションエクスプローラーに表示されている「参照」を右クリックします。
+ 「参照の追加」をクリックします。
#ref(11.png)
#br
+ Window をクリックします。~
もし、Windowが表示されていない場合は、プロジェクトのアンロード、プロジェクトの再読み込みをしてみてください。
+ Windows.Foundation, Windows.Data, Windows.UI の3つをクリックします。
#ref(12.png)
#br
+ System.Runtime.dll 以下の手順で参照に含めます。
+ 参照ボタンをクリックします。
#ref(13.png)
#br
+ 以下のフォルダににある System.Runtime.dll を選択します。(.NET Framework 4.7.2使用)
%ProgramFiles(x86)%\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\Facades
ほとんどの方はCドライブにWindowsをインストールしていると思いますので下のパスになります。
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\Facades
+ System.Runtime.dll を選択し追加ボタンをクリックします。
#ref(14.png)
#br
+ これで参照は終わりです。~
OKボタンをクリックします。
#ref(15.png)
以上の操作でプロジェクトの作成は完了です。
* コンソールアプリケーションによるトースト通知サンプルコード [#zdc8ef35]
以下のサンプルコードをProgram.csに適用してください。
本コンソールプログラムのプロジェクトは以下のURL(GitHub)に公開してあります。~
https://github.com/oss-sakura/Toast4U~
using System;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
using Windows.Data.Xml.Dom;
using Windows.UI.Notifications;
namespace Toast4U
{
class Program
{
static void Main(string[] args)
{
if (!(args.Length == 2 || args.Length == 3))
{
Usage();
return;
}
if (args.Length == 3 && !(File.Exists(args[2])))
{
Console.Error.WriteLine("{0} image file not found!", args[2]);
return;
}
Toaster toaster = new Toaster();
Task.Run(() => toaster.SendToastNotification(args));
while (toaster.Finished == false)
{
Thread.Sleep(10);
}
}
static void Usage()
{
string command = Path.GetFileName(Environment.GetCommandLineArgs()[0]);
Console.WriteLine("Usage: {0} title message [image]", command);
Console.WriteLine(" e.g.: {0} INFOMATION \"HELLO WORLD\"", command);
Console.WriteLine(" e.g.: {0} INFOMATION \"HELLO WORLD\" c:\\path\\to\\image.png", command);
}
}
class Toaster
{
private ToastNotification _toast;
public bool Finished { get; private set; } = false;
public void SendToastNotification(string[] args)
{
string Toast = "";
string title = args[0];
switch (args.Length)
{
case 2:
// Title and Message XML
Toast = String.Format(
"<toast><visual><binding template=\"ToastText01\"><text id=\"1\">{0}</text></binding></visual></toast>"
,args[1]);
break;
case 3:
// Title, Message and Image XML
Toast = String.Format(
"<toast><visual><binding template=\"ToastImageAndText01\"><image id=\"1\" src=\"{1}\"/><text id=\"1\">{0}</text></binding></visual></toast>"
, args[1], args[2]);
break;
default:
// unknown case
Toast = "<toast><visual><binding template=\"ToastText01\"><text id=\"1\">unknown</text></binding></visual></toast>";
break;
}
XmlDocument toastTemplate = new XmlDocument();
toastTemplate.LoadXml(Toast);
// Create the toast and attach event handlers.
_toast = new ToastNotification(toastTemplate);
_toast.Dismissed += ToastNotificationComplete;
_toast.Activated += ToastNotificationComplete;
_toast.Failed += ToastNotificationComplete;
ToastNotificationManager.CreateToastNotifier(title).Show(_toast);
}
private void ToastNotificationComplete(ToastNotification sender, object args)
{
Finished = true;
}
}
}
* Toast4Uの使い方 [#s24e765f]
上記のプロジェクトをGitHubからダウンロードするか、作成したプロジェクトをビルドしてください。~
ビルドすると Toast4U.exe が作成さくせされるので、コマンドプロンプトを起動しToast4U.exeのあるディレクトリに移動し、以下の操作を行ってください。
引数なしで Toast4U.exe を起動すると使用方法が出力されます。
D:\Toast4U\Toast4U\bin\Release>Toast4U.exe
Usage: Toast4U.exe title message [image]
e.g.: Toast4U.exe INFOMATION "HELLO WORLD"
e.g.: Toast4U.exe INFOMATION "HELLO WORLD" c:\path\to\image.png
実際にタイトル、メッセージと画像を表示するコマンド例を以下に記します。
** タイトル、メッセージ表示 [#sce86585]
-コマンド例
Toast4U.exe トースト通知 こんにちは世界
#ref(21.png)
** タイトル、メッセージ、イメージ表示 [#l22ea790]
適当なイメージファイルを準備してください。~
-コマンド例
Toast4U.exe HODL "Bitcoin To The Moon" D:\BTC.png
#ref(22.png)
* その他 [#fe10d5de]
トースト通知に使用したXMLですが、ToastTemplateType.ToastText01, ToastTemplateType.ToastImageAndText01を参考にしました。
- ToastTemplateType.ToastText01
<toast><visual><binding template="ToastText01"><text id="1"></text></binding></visual></toast>
-ToastTemplateType.ToastImageAndText01
<toast><visual><binding template="ToastImageAndText01"><image id="1" src=""/><text id="1"></text></binding></visual></toast>
以上、コンソールアプリケーションからトースト通知を送信し完了するまで待つサンプルコードでした。
#htmlinsert(windev-btm.html)