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. VBScript

    【Illustrator】指定したPDFプリセットでAIファイルをPDFに一括変換するVBScrip…

    前回の記事で、Illustratorに登録されたPDFプリセットを列挙…

  2. Power Automate for desktop

    [Power Automate Desktop]OCR(Computer Vision)アクションを…

    先週の金曜日に開催されたRPA勉強会に参加し、PADとAI-OCRのデ…

  3. Office関連

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

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

  4. VBScript

    ショートカットファイルを作成するVBScript

    ショートカットファイル(拡張子:lnk)を作成するVBScriptです…

  5. VBScript

    Acrobatを使ってPDFファイルを結合するVBScript

    「Acrobat PDF 結合 コマンドライン」といったキーワード検索…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

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

Translate

最近の記事

アーカイブ

PAGE TOP