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

    Adobe Illustratorを操作するVBScript

    Acrobatと同様にタイプライブラリが用意されているため、VBAやV…

  2. Windows 10

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

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

  3. VBScript

    Microsoft Edgeのバージョン情報をクリップボードにコピーするVBScript

    前回の記事に引き続き、自分の手間を減らすためのスクリプト、今回はMic…

  4. Office関連

    ヘッドレス ChromeとSeleniumBasicでWebページ全体のスクリーンショットを撮る方法…

    先日、ヘッドレス ChromeでWebページ全体のスクリーンショットを…

  5. Power Automate for desktop

    [Power Automate Desktop]Google APIのアクセストークンを取得するフロ…

    前回の記事でGoogle APIのアクセストークンを取得するPower…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

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

Translate

最近の記事

アーカイブ

PAGE TOP