Power Automate for desktop

Power Automate Desktopでストアアプリを実行する方法

Power Platform CommunityにPower Automate Desktop(PAD)からストアアプリ版のPower BIを実行したいとの質問がありました。

通常のアプリケーションはパスを指定して実行できますが、ストアアプリではそれができません。例えばストアアプリの「切り取り & スケッチ」の実行ファイルのパスは下記の通りですが、このパスを指定しても実行時にはエラーが発生します。

C:\Program Files\WindowsApps\Microsoft.ScreenSketch_10.2008.2277.0_x64__8wekyb3d8bbwe\ScreenSketch.exe

このようなストアアプリを実行したい場合、最も簡単なのはアプリに関連付けられたURIスキームを指定することです。

上記の「切り取り & スケッチ」の場合は、アプリケーション パスに「ms-screensketch:」(最後の :(コロン) は必須)を指定することで、PADからアプリケーションを実行できます。

アプリに関連付けられたURIスキームの取得方法

URIスキームは下記レジストリ以下にある「CustomProperties」キーから「Name」エントリの値として取得できます。

HKEY_CLASSES_ROOT\Extensions\ContractId\Windows.Protocol\PackageId\

例えば「切り取り & スケッチ」の場合は下記の通りです。

[HKEY_CLASSES_ROOT\Extensions\ContractId\Windows.Protocol\PackageId\Microsoft.ScreenSketch_10.2008.2277.0_x64__8wekyb3d8bbwe\ActivatableClassId\App.AppXwnmr9952bptdbfyz5zk8cebdbtcyf7na.mca\CustomProperties]
"Name"="ms-screensketch"

CustomPropertiesキーを1つずつ確認していくのは大変ですが、下記PowerShellコードを実行することで、必要な値のみを抜き出せます。

(Get-ChildItem -Path "Registry::HKCR\Extensions\ContractId\Windows.Protocol\PackageId\" -Include "CustomProperties" -Recurse | Get-ItemProperty).Name

AppUserModelId(AUMID)によるストアアプリの実行方法

下記記事でも書いている通り、ストアアプリはAppUserModelId(Application User Model ID)を指定することでも実行できます。

例えば「切り取り & スケッチ」の場合はAUMIDが「Microsoft.ScreenSketch_8wekyb3d8bbwe!App」なので、アプリケーション パスに下記を指定することで、PADからアプリケーションを実行できます。

shell:AppsFolder\Microsoft.ScreenSketch_8wekyb3d8bbwe!App

上記記事のスクリプトを一部変更して、下記フローのようにアプリ名を指定して実行することもできます。

# アプリ名を指定してストアアプリを実行するPADフロー
Display.InputDialog Title: $'''アプリ名入力''' Message: $'''実行するアプリ名を入力してください。''' DefaultValue: $'''切り取り''' InputType: Display.InputType.SingleLine IsTopMost: True UserInput=> AppName ButtonPressed=> ButtonPressed
IF ButtonPressed = $'''OK''' THEN
    IF AppName.Length > 0 THEN
        # VBSでアプリのAppUserModelId(AUMID)を取得
        System.RunVBScript VBScriptCode: $'''Option Explicit

Dim itm

With CreateObject(\"Shell.Application\").Namespace(\"shell:AppsFolder\")
  For Each itm In .Items
    If InStr(LCase(itm.Name), LCase(\"%AppName%\")) Then
      WScript.Echo itm.Path
      Exit For
    End If
  Next
End With''' ScriptOutput=> AUMID ScriptError=> ScriptError
        IF AUMID.IsEmpty = $'''False''' THEN
            Text.Trim Text: AUMID TrimOption: Text.TrimOption.Both TrimmedText=> AUMID
            System.RunApplication ApplicationPath: $'''shell:AppsFolder\\%AUMID%''' WindowStyle: System.ProcessWindowStyle.Normal ProcessId=> AppProcessId
        ELSE
            Display.ShowMessageWithTimeout Message: $'''アプリ名「%AppName%」が見つかりませんでした。''' Icon: Display.Icon.Warning Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: True Timeout: 3 ButtonPressed=> ButtonPressed2
        END
    END
END

上記フローでは「shell:AppsFolder」経由でアプリを実行していますが、AUMIDが分かればPowerShell経由でIApplicationActivationManager::ActivateApplicationメソッドを呼び出すことでもストアプリを実行できます。

ただ、処理後にアプリを終了する等、プロセスIDを使って何か処理を行う必要がない場合は「shell:AppsFolder」経由での実行で十分だと思います。

# アプリ名を指定してストアアプリを実行するPADフロー
Display.InputDialog Title: $'''アプリ名入力''' Message: $'''実行するアプリ名を入力してください。''' DefaultValue: $'''切り取り''' InputType: Display.InputType.SingleLine IsTopMost: True UserInput=> AppName ButtonPressed=> ButtonPressed
IF ButtonPressed = $'''OK''' THEN
    IF AppName.Length > 0 THEN
        # VBSでアプリのAppUserModelId(AUMID)を取得
        System.RunVBScript VBScriptCode: $'''Option Explicit

Dim itm

With CreateObject(\"Shell.Application\").Namespace(\"shell:AppsFolder\")
  For Each itm In .Items
    If InStr(LCase(itm.Name), LCase(\"%AppName%\")) Then
      WScript.Echo itm.Path
      Exit For
    End If
  Next
End With''' ScriptOutput=> AUMID ScriptError=> ScriptError
        IF AUMID.IsEmpty = $'''False''' THEN
            Text.Trim Text: AUMID TrimOption: Text.TrimOption.Both TrimmedText=> AUMID
            # IApplicationActivationManager::ActivateApplicationメソッドでアプリを実行することでプロセスIDを取得
            System.RunPowershellScript Script: $'''$code = @\"
using System;
using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;
 
namespace ExecStoreApp
{
  [ComImport, Guid(\"2e941141-7f97-4756-ba1d-9decde894a3d\"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
  interface IApplicationActivationManager
  {
    IntPtr ActivateApplication([In] String appUserModelId, [In] String arguments, [In] UInt32 options, [Out] out UInt32 processId);
  }
   
  [ComImport, Guid(\"45BA127D-10A8-46EA-8AB7-56EA9078943C\")]
  public class ApplicationActivationManager : IApplicationActivationManager
  {
    [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)/*, PreserveSig*/]
    public extern IntPtr ActivateApplication([In] String appUserModelId, [In] String arguments, [In] UInt32 options, [Out] out UInt32 processId);
  }
}
\"@
Add-Type $code
$processId = 0
$aam = New-Object ExecStoreApp.ApplicationActivationManager
$res = $aam.ActivateApplication(\"%AUMID%\", $null, 0, [ref]$processId)
Write-Output $processId''' ScriptOutput=> ProcessId ScriptError=> ScriptError2
            Text.Trim Text: ProcessId TrimOption: Text.TrimOption.Both TrimmedText=> ProcessId
            Display.ShowMessageWithTimeout Message: $'''起動したアプリのプロセスID:%ProcessId%''' Icon: Display.Icon.Information Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: True Timeout: 3 ButtonPressed=> ButtonPressed3
            System.TerminateProcessById ProcessId: ProcessId
        ELSE
            Display.ShowMessageWithTimeout Message: $'''アプリ名「%AppName%」が見つかりませんでした。''' Icon: Display.Icon.Warning Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: True Timeout: 3 ButtonPressed=> ButtonPressed2
        END
    END
END

上記の通り、URIスキームやAUMIDを指定することでPADからストアプリを実行できますので、ストアアプリの制御が必要な際には是非お試しください。

参考Webサイト

関連記事

2021年7月の人気記事前のページ

Power Automate DesktopのPDFアクションがWebサービスを使っているのか調べてみました。次のページ

関連記事

  1. Power Automate for desktop

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

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

  2. Power Automate for desktop

    APIを使ったkintoneとPower Automate for desktopの連携(2)

    前回の記事ではkintone REST APIを使ってPower Au…

  3. Power Automate for desktop

    APIを使ったkintoneとPower Automate for desktopの連携

    前回の記事でkintone 開発者ライセンスの取得方法を紹介したので、…

  4. Power Automate for desktop

    「はじめてのPower Automate Desktop」レビュー

    以前書いた記事でも紹介していますが、株式会社ASAHI Account…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

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

Translate

最近の記事

アーカイブ

PAGE TOP