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

    [PowerShell]iTextSharpを使ってPDFファイルのページ数を取得する

    前回の記事では、VBAでAdobe ReaderからPDFファイルのペ…

  2. PowerShell

    [PowerShell]MailKitを使ってメールにファイルを添付する方法

    先日、PowerShellからMailKitを使ってメールを送信する方…

  3. VBScript

    指定したフォルダ内のemlファイルの情報をリスト化するVBScript

    emlファイルから件名や本文、宛先や送信日時といった各種情報を取得して…

  4. Power Automate for desktop

    [Power Automate for desktop]セレクターを変数化することでアプリのバージョ…

    OSやアプリのバージョンが変わるとウィンドウ構造の違いによって、同じア…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

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

Translate

最近の記事

アーカイブ

PAGE TOP