【Window業務効率化】バッチファイルの処理状況をPowerShell経由でタスクトレイにトースト通知する

【Window業務効率化】バッチファイルの処理状況をPowerShell経由でタスクトレイにトースト通知する

バッチファイルの処理状況をPowerShell経由でタスクトレイにトースト通知する

この記事では、バッチファイルの処理状況をPowerShell経由でタスクトレイにトースト通知する「MakeToastNotification.bat」というバッチファイルを紹介します。

このバッチファイルを呼び出し元のバッチファイルや VBSコードの中で呼び出すと、Windowsオペレーティングシステムで一般的に利用されている以下のようなトースト通知をタスクトレイに簡単に表示できます。

【Window業務効率化】バッチファイルの処理状況をPowerShell経由でタスクトレイにトースト通知する


この記事が少しでも皆さんのお役に立てれば幸いです。

解決できること

このバッチファイルを呼び出し元のバッチファイルや VBSコードの中で呼び出すと、Windowsオペレーティングシステムで一般的に利用されている以下のようなトースト通知をタスクトレイに

  • バッチファイルからの起動は1行
  • VBSからの起動は2行

で表示できます。

読んでほしい方

  • バッチファイル、VBS、VBA等を使って業務効率化に取り組まれている方
  • これらを連携したツールを開発されている方で、ツール間で共通したユーザーインターフェースを取り入れたい方

MakeToastNotification.bat の紹介

トースト通知動作条件

このトースト通知はWindows の設定で通知がON設定になっていないと通知が表示されないので事前に

Windowsの「スタート」メニューから、歯車アイコンを選択し

設定 > システム > 通知とアクション

を順に選び、通知とアクション セクションの中で、通知の設定が オン になっていることを確認してください。

【Window業務効率化】バッチファイルの処理状況をPowerShell経由でタスクトレイにトースト通知する

 

バッチファイルからの呼び出し例

例えば あるバッチファイルの中で以下のように

Call %USERPROFILE%\tools\bat\MakeToastNotification.bat "状況連絡"  "処理1が終了しました。" 

Call %USERPROFILE%\tools\bat\MakeToastNotification.bat "状況連絡"  "処理2が終了しました。" 


記述すると、画面右下のWindowsのタスクトレイにそれぞれ

【Window業務効率化】バッチファイルの処理状況をPowerShell経由でタスクトレイにトースト通知する
【Window業務効率化】バッチファイルの処理状況をPowerShell経由でタスクトレイにトースト通知する


といったトースト通知が表示されます。

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のタスクトレイにそれぞれ

【Window業務効率化】バッチファイルの処理状況をPowerShell経由でタスクトレイにトースト通知する
【Window業務効率化】バッチファイルの処理状況をPowerShell経由でタスクトレイにトースト通知する


といったトースト通知が表示されます。

バッチファイルの保存場所

本記事ではこのバッチファイルを以下の記事も参考にしながら

【Windows業務効率化】バッチファイルでツールのフォルダ環境を自動生成しよう
  • %USERPROFILE%\tools\bat\MakeToastNotification.bat

に保存します。%USERPROFILE% については必要に応じて以下の記事も参照ください。

【Windows業務効率化】バッチファイルの基本テクニックを知ろう

バッチファイルの詳細

このバッチファイル 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に渡すコマンド文字列を組みあげ、これを実行します。
【Window業務効率化】バッチファイルの処理状況をPowerShell経由でタスクトレイにトースト通知する
しらかば堂

ここでくみ上げたコマンド文字列は本記事は以下の記事で利用しているPowerShell構文と全く同一なので、必要に応じてこちらも参照ください。

【Excel VBA】VBAの処理状況をPowerShell経由でタスクトレイにトースト通知する

またバッチファイルのパラメータの修飾子~等については以下の記事に詳細な紹介があります。

【Windows業務効率化】バッチファイルの引数、Shiftコマンド、Forコマンド、修飾子を知ろう

まとめ

この記事では、バッチファイルの処理状況をPowerShell経由でタスクトレイにトースト通知する「MakeToastNotification.bat」というバッチファイルを紹介しました。

このバッチファイルを呼び出し元のバッチファイルや VBSコードの中で呼び出すと、Windowsオペレーティングシステムで一般的に利用されている以下のようなトースト通知をタスクトレイに簡単に表示できます。

この記事が少しでも皆さんのお役に立てれば幸いです。

【特集】自動化ツールをバッチファイルで統合し 作業をワンクリックで終わらせよう