このエントリーをはてなブックマークに追加


コンソールプログラムからトースト通知をするサンプル

コンソールプログラムでトースト通知を実現するサンプルコードがネット上にありましたが
トースト通知を依頼し(ToastNotifier.Show)、作成したコンソールプログラムが終了すると何も表示されません。
トースト表示がされる(終わる)まで待たないといけないようです。
もちろん、Sleepなどを入れれば表示されますが…

''本資料では、トースト通知が表示されイベントが戻ってきてコンソールプログラムが終了するようになっています。
イベントはトースト通知を閉じたり、トースト通知表示後、通知が隠れるとイベントが発生します。''

GitHubに公開

本コンソールプログラムのプロジェクトは以下のURL(GitHub)に公開してあります。
https://github.com/oss-sakura/Toast4U
ソースコードは以下の参考記事サイトに公開されているコードを流用させた頂きました。(感謝)

動作確認&開発環境

  • Windows 10 ver. 21H1
  • Visual Studio 2019
  • .NET Framework 4.7.2

参考記事

コンソールプログラムでトースト通知プロジェクトを作る手順

コンソールプログラムからトースト通知をするプロジェクトを以下の手順で作成します。

プロジェクトの作成

  1. Visual Studio 2019 の起動します。
  2. 新しいプロジェクトの作成 をクリックします。
    01.png
     
  3. コンソールアプリ(.NET Framework)を選択し「次へ」ボタンをクリックします。
    02.png
     
  4. プロジェクト名に Toast4U と入力します。
  5. 場所は皆さんの環境にあった場所を指定してください。(もちろんデフォルトでもかまいません。)
  6. 入力が完了したら「作成」ボタンをクリックします。
    03.png
     
  7. プロジェクト画面が表示されます。

WinRTを参照できるようにする

  1. ソリューションエクスプローラーにある「Toast4U」プロジェクトを右クリックします。
  2. 「プロジェクトのアンロード」をクリックします。
    04.png
     
  3. Toast4U.csproj ファイルが表示されます。
    05.png
     
  4. Toast4U.csproj に以下の文字列を追記します。
     <PropertyGroup>
       <TargetPlatformVersion>8.0</TargetPlatformVersion>
     </PropertyGroup>
    35行目~37行目に追記しました。
    06.png
     
  5. 追記が終わったら、Ctrl + S またはフロッピーディスクのアイコンをクリックし保存します。
     
  6. ソリューションエクスプローラーにある「Toast4U」プロジェクトを右クリックします。
  7. 「プロジェクトの再読み込み」をクリックします。
    07.png
     

必要な参照を追加

  1. ソリューションエクスプローラーに表示されている「参照」を右クリックします。
  2. 「参照の追加」をクリックします。
    11.png
     
  3. Window をクリックします。
    もし、Windowが表示されていない場合は、プロジェクトのアンロード、プロジェクトの再読み込みをしてみてください。
  4. Windows.Foundation, Windows.Data, Windows.UI の3つをクリックします。
    12.png
     
  5. System.Runtime.dll 以下の手順で参照に含めます。
  6. 参照ボタンをクリックします。
    13.png
     
  7. 以下のフォルダににある 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
  8. System.Runtime.dll を選択し追加ボタンをクリックします。
    14.png
     
  9. これで参照は終わりです。
    OKボタンをクリックします。
    15.png

以上の操作でプロジェクトの作成は完了です。

コンソールアプリケーションによるトースト通知サンプルコード

以下のサンプルコードを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の使い方

上記のプロジェクトを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

実際にタイトル、メッセージと画像を表示するコマンド例を以下に記します。

タイトル、メッセージ表示

  • コマンド例
    Toast4U.exe トースト通知 こんにちは世界
    21.png

タイトル、メッセージ、イメージ表示

適当なイメージファイルを準備してください。

  • コマンド例
    Toast4U.exe HODL "Bitcoin To The Moon" D:\BTC.png
    22.png

その他

トースト通知に使用した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>

以上、コンソールアプリケーションからトースト通知を送信し完了するまで待つサンプルコードでした。


添付ファイル: file22.png 98件 [詳細] file21.png 88件 [詳細] file15.png 100件 [詳細] file14.png 78件 [詳細] file13.png 86件 [詳細] file12.png 94件 [詳細] file11.png 64件 [詳細] file07.png 77件 [詳細] file06.png 92件 [詳細] file05.png 89件 [詳細] file04.png 75件 [詳細] file03.png 87件 [詳細] file02.png 96件 [詳細] file01.png 88件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-09-11 (土) 22:40:55