少し時間のかかる作業をスクリプトに行なわせたとき、終了したら適当に通知しておいてほしいことがある。ただ、別の作業をしているので、いきなりメッセージボックスが画面に現れるというのも問題が生じる。
Windows 10でそういうときに便利なのが、トースト通知だ。トースト通知は、表示したときにフォーカスを持たないため作業を邪魔しないし、アクションセンターに履歴が残るため、あとで確認もできる。
Windowsのトースト通知は、ToastNotificationと呼ばれ、かつてはUWPアプリケーションだけが利用できたが、その後、Windows PowerShellからも利用できるようになった。なお、通知の表示時間などトースト通知に関する設定については、以下の記事を参照してほしい。
●Windows 10で結構表示される通知を整理してアクションセンターをスッキリ
https://ascii.jp/elem/000/001/114/1114188/
まずは簡単なところから試してみる
以下のリストは、Windows PowerShellからトースト通知をするスクリプトだ。残念ながら、このスクリプトはPowerShell 7では動作しない。不可能ではないのだが、ちょっと面倒な作業が必要になるため、記事での掲載は諦めた。少なくともWindows 10ならばWindows PowerShellは標準で含まれているので、そちらで試してほしい。
$AppId = "{1AC14E77-02E7-4E5D-B744-2EB1AE5198B7}\WindowsPowerShell\v1.0\powershell.exe";
$template=
[Windows.UI.Notifications.ToastNotificationManager,Windows.UI.Notifications, ContentType = WindowsRuntime]::GetTemplateContent(
[Windows.UI.Notifications.ToastTemplateType, Windows.UI.Notifications, ContentType = WindowsRuntime]::ToastText01);
$msg="ASCII.JP`nWindows Info";
$template.GetElementsByTagName("text").Item(0).InnerText=$msg;
[Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier($AppId).Show($template);
5行目の$msgを設定しているダブルクオートの中身を書き換えると表示されるメッセージを書き換えることができる。ダブルクオートの中にある「`n」は、PowerShellでの「改行文字」である。試すだけなら、Windows PowerShellを起動して、このリストをコピーして貼り付ける。繰り返し実行したいときには、5行目のように$msgに表示させたい文字列を指定して、6行目、7行目を再実行すればよい。
簡単に仕組みを解説する
とはいえ、中身もわからずに使うのもキモチが悪いだろう。仕組みには興味がないというのであれば、ここは読み飛ばしてかまわない。ということで簡単に解説しておく。
まず、トースト通知を使うには、アプリケーションID(AppIDやAUMIDなどと呼ばれる)が必要になる。これは、Windows PowerShellのAppIDを使う(リスト1行目)。Windows PowerShellを使う限り、ここは書き換える必要はない。
2~4行目は、$templateという変数にトースト通知のテンプレートを取得しているもの。クラス指定が長くて面倒そうだが、実際には「GetTemplateContent」というメソッドに、「ToastText01」という値を渡しているだけだ。このテンプレートについては、Microsoftの以下のページにサンプルがある。
●The toast template catalog
https://docs.microsoft.com/en-us/previous-versions/windows/apps/hh761494(v=win.10)
クラス指定が長いのは、それがWinRT側のクラスだからである。
GetTemplateContentの戻り値を受け取る変数$templateは、
<toast>
<visual>
<binding template="ToastText01">
<text id="1"></text>
</binding>
</visual>
</toast>
というXMLデータになっていて、「<text id="1">」と「</text>」で挟まれた部分にメッセージを書き込む必要がある。それが6行目だ。最後の7行目は、トースト通知を表示させるためのものだ。
なお、すでに画面にトースト通知があると、同じアプリからの通知は表示を待たされるので、何回も繰り返すときには、前の通知を消しておく必要がある。
この連載の記事
-
第459回
PC
WSL 2.4.4ではtar形式でのディストリビューションが配布でき、企業での利用が容易になってきた -
第458回
PC
Windows上でhostsファイルを活用する -
第457回
PC
IPv6アドレスは先頭を見ればどんな種類かわかる -
第456回
PC
あらためてIPv6基本のキ -
第455回
PC
Windowsで現在どのネットワークアダプタがインターネット接続に使われているかを調べる方法 -
第454回
PC
Windows 11 24H2では「デバイスの暗号化」の条件が変わり、より多くのPCでドライブが暗号化される -
第453回
PC
Windows 11 24H2の配布開始後もすぐにはやってこない Windows UpdateとSafeguard Holds -
第452回
PC
Windows 11 Ver.24H2が登場 Copilot+ PCとそうでないPCで実質Windowsが2つに分かれる -
第451回
PC
新しいWindowsサンドボックスではコマンドラインからの制御が可能に -
第450回
PC
ユニコードで文字数を数える方法 -
第449回
PC
WSLはプレビュー版でGUIでの設定が加わった! リリース2.3.xの新機能を見る - この連載の一覧へ