目次
バッチファイルの処理状況をPowerShell経由でタスクトレイにトースト通知する
この記事では、バッチファイルの処理状況をPowerShell経由でタスクトレイにトースト通知する「MakeToastNotification.bat」というバッチファイルを紹介します。
このバッチファイルを呼び出し元のバッチファイルや VBSコードの中で呼び出すと、Windowsオペレーティングシステムで一般的に利用されている以下のようなトースト通知をタスクトレイに簡単に表示できます。
この記事が少しでも皆さんのお役に立てれば幸いです。
解決できること
このバッチファイルを呼び出し元のバッチファイルや VBSコードの中で呼び出すと、Windowsオペレーティングシステムで一般的に利用されている以下のようなトースト通知をタスクトレイに
- バッチファイルからの起動は1行
- VBSからの起動は2行
で表示できます。
読んでほしい方
- バッチファイル、VBS、VBA等を使って業務効率化に取り組まれている方
- これらを連携したツールを開発されている方で、ツール間で共通したユーザーインターフェースを取り入れたい方
MakeToastNotification.bat の紹介
トースト通知動作条件
このトースト通知はWindows の設定で通知がON設定になっていないと通知が表示されないので事前に
Windowsの「スタート」メニューから、歯車アイコンを選択し
設定 > システム > 通知とアクション
を順に選び、通知とアクション セクションの中で、通知の設定が オン になっていることを確認してください。
バッチファイルからの呼び出し例
例えば あるバッチファイルの中で以下のように
Call %USERPROFILE%\tools\bat\MakeToastNotification.bat "状況連絡" "処理1が終了しました。"
Call %USERPROFILE%\tools\bat\MakeToastNotification.bat "状況連絡" "処理2が終了しました。"
記述すると、画面右下のWindowsのタスクトレイにそれぞれ
といったトースト通知が表示されます。
VBSからの呼び出し例
またVBSコードからこのバッチファイルを呼び出す際には例えば変数
- msg_title
- msg_text
を処理の中で設定し、これをトースト表示するようなケースでは、VBSコードの中で
Dim msg_title
Dim msg_text
msg_title = "状況連絡"
Dim WS
Set WS = CreateObject("WScript.Shell")
msg_text = "処理1が終了しました。"
WS.Run "%comspec% /c call %USERPROFILE%\Tools\bat\MakeToastNotification.bat """ & msg_text & """ : """ & msg_title & """", 0, True
msg_text = "処理2が終了しました。"
WS.Run "%comspec% /c call %USERPROFILE%\Tools\bat\MakeToastNotification.bat """ & msg_text & """ : """ & msg_title & """", 0, True
のように WScript.Shell 経由でこのバッチファイルを変数 msg_title、msg_text と共に起動すると、画面右下のWindowsのタスクトレイにそれぞれ
といったトースト通知が表示されます。
バッチファイルの保存場所
本記事ではこのバッチファイルを以下の記事も参考にしながら
- %USERPROFILE%\tools\bat\MakeToastNotification.bat
に保存します。%USERPROFILE% については必要に応じて以下の記事も参照ください。
バッチファイルの詳細
このバッチファイル MakeToastNotification.bat は、Windowsのタスクトレイにトースト通知を送信するためのもので、呼び出しの際
- 第一パラメータ:トースト通知のタイトルとなる文字列を””で囲んだ文字列で指定します。
- 第二パラメータ:トースト通知の本文となる文字列を””で囲んだ文字列で指定します。
を指定します。
@echo off
set "msg_title=%~1"
set "msg_text=%~2"
powershell -Command "Add-Type -AssemblyName System.Windows.Forms; $toast = New-Object System.Windows.Forms.NotifyIcon; $toast.Icon = [System.Drawing.Icon]::ExtractAssociatedIcon('C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe'); $toast.BalloonTipTitle = '%msg_title%'; $toast.BalloonTipText = '%msg_text%'; $toast.Visible = $True; $toast.ShowBalloonTip(0)"
MakeToastNotification.batの簡単な説明
行番号 | 説明 |
---|---|
1 | このバッチファイルで echo コマンド を除いた以後の実行コマンドそのもの、あるいはその実行結果を以下のようにコマンドプロンプト上に表示しないように指定 |
3 | %1を展開し、周囲の引用符( “”)を削除した文字列を変数 msg_title に代入します。 |
4 |
%2を展開し、周囲の引用符( “”)を削除した文字列を変数 msg_text に代入します。 |
6 | 入力パラメータ msg_title、msg_text を使ってPowerShellに渡すコマンド文字列を組みあげ、これを実行します。 |
まとめ
この記事では、バッチファイルの処理状況をPowerShell経由でタスクトレイにトースト通知する「MakeToastNotification.bat」というバッチファイルを紹介しました。
このバッチファイルを呼び出し元のバッチファイルや VBSコードの中で呼び出すと、Windowsオペレーティングシステムで一般的に利用されている以下のようなトースト通知をタスクトレイに簡単に表示できます。
この記事が少しでも皆さんのお役に立てれば幸いです。
ここでくみ上げたコマンド文字列は本記事は以下の記事で利用しているPowerShell構文と全く同一なので、必要に応じてこちらも参照ください。
またバッチファイルのパラメータの修飾子~等については以下の記事に詳細な紹介があります。