対象のファイルが各フォルダに分散していることが多くなり、ファイルをショートカット(*.lnk)アイコンへドラッグ&ドロップする方法では不都合な場合が多くなった。
Window(System.Windows.Window
)へのドラッグ&ドロップを考える。
# PowerShell 5.1, Windows 11 (2024年8月頃) Set-StrictMode -Version Latest $paths = [System.Collections.Specialized.StringCollection]::new() Add-Type -AssemblyName PresentationFramework $w = New-Object -TypeName System.Windows.Window -Property @{ Title = "ドラッグ&ドロップ" Width = 300 Height = 200 AllowDrop = $true } $xaml = [System.Windows.Markup.XamlWriter]::Save($w) <# $xaml = @' <Window Title="ドラッグ&ドロップ" Width="300" Height="200" AllowDrop="True" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" /> '@ #> $stringReader = [System.IO.StringReader]::new($xaml) $xmlReader = [System.Xml.XmlReader]::Create($stringReader) $window = [System.Windows.Markup.XamlReader]::Load($xmlReader) # add_Drop Method の確認 # $window | Get-Member -Force | Where-Object Name -Match '^add_.*(drag|drop)' | Out-GridView $window.add_Drop([System.Windows.DragEventHandler]{ param([object]$sender, [System.Windows.DragEventArgs]$e) $Local:paths = [string[]]$e.Data.GetFileDropList() $Local:paths | Write-Host -ForegroundColor Cyan $Global:paths.AddRange($Local:paths) <# # スコープの確認 @(Get-Variable -Scope Global | Select-Object -Property @{Name = "Scope"; Expr = {"Global"}}, *) + @(Get-Variable -Scope Local | Select-Object -Property @{Name = "Scope"; Expr = {"Local"}} , *) + @(Get-Variable -Scope Script | Select-Object -Property @{Name = "Scope"; Expr = {"Script"}}, *) | Sort-Object -Property Name, Scope | Where-Object Name -Match 'paths' | Out-GridView #> }) $null = $window.ShowDialog() $paths | Write-Host -ForegroundColor Magenta