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 for desktopの起動方法

    今回はPower Automate for desktop(PAD)の…

  2. Power Automate for desktop

    Power Automate Desktopを更新するPowerShellスクリプト

    公式ブログを見れば分かる通り、Power Automate Deskt…

  3. Power Automate for desktop

    [Power Automate for desktop]ファイル名として使えない文字を別の文字に置き…

    例えばExcelのセルから読み取った値を使ってファイル名の変更等を行い…

  4. Power Automate for desktop

    [Power Automate for desktop]名前を付けて保存ダイアログを操作するフロー

    前回の記事でUI要素のセレクターで変数が使用できることを説明しましたが…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

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

Translate

最近の記事

アーカイブ

PAGE TOP