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

    GUIDを作成するVBScript

    Office アドインを作成するのに必要(マニフェストのId要素)なG…

  2. Excel

    フォルダ内にあるExcelファイルをカウントするVBScript

    「フォルダ内 Excel 数える VBScript」といったキーワード…

  3. VBScript

    Office文書を旧バージョンのファイル形式に変換するVBScript

    xlsxやdocxといった新しい形式のOffice文書をスクリプトファ…

  4. リボン関連

    PowerShellからリボンUIを呼ぶ方法

    下記記事で簡易的なUIとして手軽なHTAを使いました。…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

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

Translate

最近の記事

アーカイブ

PAGE TOP