PADで新しくフォルダを開いた時に、その最後に開いたフォルダパスを取得し、処理を進めるマクロです。既定メソッドではUI操作等で可能ですが、動作の遅延や安定性が無いためPSにより情報を取得しています。安定的にフォルダ開閉の判断が可能になり、フォルダ開きを伴うフローで活用できます。
・挙動
冒頭で現在のエキスプローラを取得します。取得値は比較用のBefPathsとAftPathsに格納されます。

取得値はテーブル型として取得されます。

その後両変数の長さを比較対象とし、AftPathsが増加した場合は新しいエキスプローラが開いたと判断しループを終了します。

最後に開いたフォルダーを操作するため、後半ではまずテーブル型を行ごとに分割してリスト化します。リストではこのリスト変数の.countプロパティにより最終行の値を取得しますが、なぜか空欄が最終行に存在するため、ー2をしています。

・コード
➤コードはこちら
**REGION Fd開くまでループ
Scripting.RunPowershellScript.RunScript Script: $'''$shell = New-Object -ComObject Shell.Application
$shell.Windows() |
Where-Object { $_.Name -eq \"エクスプローラー\" } |
ForEach-Object {
$_.Document.Folder.Self.Path
}
''' ScriptOutput=> BefPaths
Scripting.RunPowershellScript.RunScript Script: $'''$shell = New-Object -ComObject Shell.Application
$shell.Windows() |
Where-Object { $_.Name -eq \"エクスプローラー\" } |
ForEach-Object {
$_.Document.Folder.Self.Path
}
''' ScriptOutput=> AftPaths
LOOP WHILE (AftPaths.Length) <= (BefPaths.Length)
Scripting.RunPowershellScript.RunScript Script: $'''$shell = New-Object -ComObject Shell.Application
$shell.Windows() |
Where-Object { $_.Name -eq \"エクスプローラー\" } |
ForEach-Object {
$_.Document.Folder.Self.Path
}
''' ScriptOutput=> AftPaths
END
Text.SplitText.Split Text: AftPaths StandardDelimiter: Text.StandardDelimiter.NewLine DelimiterTimes: 1 Result=> AftPathsList
SET Trg_Folder TO AftPathsList[AftPathsList.Count - 2]
**ENDREGION
・ポイント機能
・PSによるエキスプローラ/フォルダパス取得
・リスト化による最終パス取得

PSによるエキスプローラ/フォルダパス取得
PSではオブジェクトでエキスプローラ(フォルダ)であるもののパスを取得します。

取得した値は、テーブル型変数として取得されます。

リスト化による最終パス取得
テーブル型に入ったパスは[]によって値を指定取得可能ですが、一行のすべてのパス取得ができません。そのためリスト型として再度取得し、行指定でフルパスを取得できるようにします。
全部で3つ開いているAftPathsListをリスト型にすると、リストに空欄を再終業に4行が格納されます。PADでは0ベースでリスト化され、最終行が一つ余分な分追加されているため、2行目取得のためには[.length - 2 ]が必要です。.Lenghtプロパティで得られる値と、0ベースのリストにより、ー1ではできない少々ややこしい変数操作が必要になります。
