Power Automate for desktop

Power Automate for desktopでフロー実行中にメッセージボックスを表示する方法

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操作を行う場合はメッセージボックスが重なって操作できなくなる可能性がある点については注意が必要です。

Power Automate for desktopでテキストから指定した種類の文字列を取得する方法前のページ

2021年12月の人気記事次のページ

関連記事

  1. Windows 10

    Selenium WebDriverでChromium版Edgeを操作してみました。

    先日書いた下記記事の通り、Chromium版Microsoft Edg…

  2. VBScript

    画像の一部にぼかしを入れるバッチ処理

    Paint.NETなどの画像処理ソフトを使うと、簡単に画像にぼかしを入…

  3. Excel

    ドラッグ&ドロップでExcelファイルをアドイン形式(xlam)に一括変換するVBScript

    複数のExcelファイルをアドイン形式(xlam)に変換する必要があっ…

  4. Office関連

    Excel REST APIをPowerShellから呼び出す方法

    以前Excel REST APIをVBAから呼び出す方法を紹介しました…

  5. Office関連

    「2014年12月のWindows Update以降コマンドボタンが使えなくなった」トラブルへのFi…

    当ブログでも「KB2553154の更新プログラムをアンインストールする…

コメント

  • コメント (0)

  • トラックバックは利用できません。

  1. この記事へのコメントはありません。

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP