Power Automate for desktop(PAD)でフローを実行する際、実行中であることを通知するためにメッセージボックスを表示しようと思ったのですが、単にVBScriptやPowerShellスクリプトを実行するだけでは、実行した時点で処理が止まってしまうために意図した通りの動作になりませんでした(サブフローにしても同様)。
そこで今回はちょっとした工夫を加えてメッセージボックスが表示された状態でもフローを続行できるようにしてみます。
別プロセスによるメッセージボックス表示
上で書いた通り、同期処理によりスクリプトの実行アクションでフローが止まってしまうのであれば、回避するのは簡単で、別プロセスでメッセージボックスを表示すれば良いだけです。
ただ、メッセージボックスを表示するためのスクリプトファイル(あるいは実行ファイル)を動的に作成するのは避けたいので、ここはPowerShellの「-Command」オプションを使用することにします。
メッセージボックスを表示するPowerShellスクリプト
実行するPowerShellのスクリプトは下記の通りで、Interaction.MsgBoxメソッドを使ってシステムモーダルなメッセージボックスを表示します。
Add-Type -AssemblyName 'Microsoft.VisualBasic' $style = [Microsoft.VisualBasic.MsgBoxStyle] [Microsoft.VisualBasic.Interaction]::MsgBox('Message', $style::OkOnly -bor $style::Question -bor $style::SystemModal, 'Title')
PowerShellスクリプトを実行するVBScript
PowerShellスクリプトの準備ができたのであとはそれを実行するだけですが、PowerShellのウィンドウは非表示にしたいので、Win32_ProcessクラスのCreateメソッドを使って、Win32_ProcessStartupクラスのShowWindowを指定(SW_HIDE(0))します。
また、メッセージボックスを閉じる際に使用するため、EchoメソッドでプロセスIDを返すようにしています。
Dim pid Dim ps Set ps = GetObject("winmgmts:Win32_ProcessStartup") ps.ShowWindow = 0 GetObject("winmgmts:Win32_Process").Create "PowerShell -Command ""Add-Type -AssemblyName 'Microsoft.VisualBasic';$style = [Microsoft.VisualBasic.MsgBoxStyle];[Microsoft.VisualBasic.Interaction]::MsgBox('Message', $style::OkOnly -bor $style::Information -bor $style::SystemModal, 'Title');""", , ps, pid WScript.Echo pid
フロー実行中に表示するメッセージボックス
メッセージボックスの準備ができたのでフローに組み込みます。
フロー全体
変数の設定
表示するメッセージとメッセージボックスのタイトルを変数として設定します。
VBScript の実行
メッセージボックスを表示するためのスクリプトを実行します。
Dim pid Dim ps Set ps = GetObject("winmgmts:Win32_ProcessStartup") ps.ShowWindow = 0 GetObject("winmgmts:Win32_Process").Create "PowerShell -Command ""Add-Type -AssemblyName 'Microsoft.VisualBasic';$style = [Microsoft.VisualBasic.MsgBoxStyle];[Microsoft.VisualBasic.Interaction]::MsgBox('%Message%', $style::OkOnly -bor $style::Information -bor $style::SystemModal, '%MessageTitle%');""", , ps, pid WScript.Echo pid
テキストを数値に変換
スクリプトから返ってきたプロセスIDを数値に変換します。
プロセスを終了する
フローの処理が終了後、「プロセスを終了する」アクションで強制的にメッセージボックスを閉じます。
実行画面
フローの実行画面は下図の通りで、処理中もメッセージボックスが表示されていることが確認できます。
これでフローが実行中であることが分かりやすくなりましたが、表示するメッセージに「"」や「'」が含まれている場合については考慮していませんし、最前面でメッセージボックスを表示しているため、UI操作を行う場合はメッセージボックスが重なって操作できなくなる可能性がある点については注意が必要です。
この記事へのコメントはありません。