xlogI125’s blog

パソコン作業を効率化したい

PowerShell: フォームにドラッグ&ドロップしたファイルのハッシュ値を表示

メモ

add_DragEnterメソッドとadd_DragDropメソッドの定義をGet-Memberコマンドレットで確認

# PowerShell 5.1, Windows 11 (2023年10月頃)
Add-Type -AssemblyName System.Windows.Forms
[Windows.Forms.Form]::new() | Get-Member -Force | Where-Object -Property Name -Match '^add_'

$_Get-Memberコマンドレットで確認

# PowerShell 5.1, Windows 11 (2023年10月頃)
Add-Type -AssemblyName System.Windows.Forms

$form = [Windows.Forms.Form]::new()
$form.Text = "クリック"

$numClicked = 0

$form.add_Click({
  # Unary array expression  (, singleObject)
  (, $_) | Get-Member -Force | Out-String -Width 80 | Write-Verbose -Verbose

  # $numClicked++
  $p = [ref]$numClicked
  $p.Value++
  Write-Verbose $numClicked -Verbose
})

$form.ShowDialog()

使い捨てスクリプト

# PowerShell 5.1, Windows 11 (2023年10月頃)

$ErrorActionPreference = "Stop"
$VerbosePreference = "Continue"

Set-StrictMode -Version Latest

Add-Type -AssemblyName System.Windows.Forms

$form = [Windows.Forms.Form]::new()
$form.AllowDrop = $true

$form.add_DragEnter({
  param([Object]$sender, [Windows.Forms.DragEventArgs]$e)

  Write-Verbose "DragEnter"

  $e.Effect = [Windows.Forms.DragDropEffects]::Copy
})

$form.add_DragDrop({
  param([Object]$sender, [Windows.Forms.DragEventArgs]$e)

  Write-Verbose "DragDrop"

  Get-FileHash -LiteralPath $e.Data.GetFileDropList() | 
  Format-List -Property Algorithm, Hash, @{Name="Name"; Expression={[IO.Path]::GetFileName($_.Path)}} | 
  Out-String -Width 80 | Write-Host
})

$form.ShowDialog()