PowerShell GUI検索アプリに「右クリックメニュー」で操作機能を追加しよう!


検索したファイルを選んで右クリック → 「開く」「コピー」「フォルダーを開く」など、よく使う操作をすぐ実行できたら便利ですよね?
PowerShellのGUIアプリに**コンテキストメニュー(右クリックメニュー)**を追加して、さらに業務効率を高めましょう!


実装する右クリックメニュー内容

メニュー内容
開く既定アプリでファイルを開く
フォルダーを開くファイルの保存フォルダーをエクスプローラーで開く
コピー選択ファイルを任意のフォルダーにコピー
削除選択ファイルを確認後に削除

コンテキストメニューのコード例(ListBoxに追加)

# コンテキストメニューの作成
$contextMenu = New-Object System.Windows.Forms.ContextMenu

# メニュー項目追加
$openItem = New-Object System.Windows.Forms.MenuItem "開く"
$folderItem = New-Object System.Windows.Forms.MenuItem "フォルダーを開く"
$copyItem = New-Object System.Windows.Forms.MenuItem "コピー"
$deleteItem = New-Object System.Windows.Forms.MenuItem "削除"

$contextMenu.MenuItems.AddRange(@($openItem, $folderItem, $copyItem, $deleteItem))
$listBox.ContextMenu = $contextMenu

各メニューの処理(クリックイベント)

# 開く
$openItem.add_Click({
    if (Test-Path $listBox.SelectedItem) {
        Start-Process $listBox.SelectedItem
    }
})

# フォルダーを開く
$folderItem.add_Click({
    $path = Split-Path $listBox.SelectedItem
    if (Test-Path $path) {
        Start-Process "explorer.exe" -ArgumentList $path
    }
})

# コピー
$copyItem.add_Click({
    $src = $listBox.SelectedItem
    $folderDlg = New-Object System.Windows.Forms.FolderBrowserDialog
    if ($folderDlg.ShowDialog() -eq "OK") {
        $dest = Join-Path $folderDlg.SelectedPath (Split-Path $src -Leaf)
        Copy-Item $src -Destination $dest -Force
        [System.Windows.Forms.MessageBox]::Show("コピーしました:`n$dest")
    }
})

# 削除(確認あり)
$deleteItem.add_Click({
    $file = $listBox.SelectedItem
    $result = [System.Windows.Forms.MessageBox]::Show("削除しますか?`n$file", "確認", "YesNo")
    if ($result -eq "Yes") {
        Remove-Item $file -Force
        $listBox.Items.Remove($file)
        [System.Windows.Forms.MessageBox]::Show("削除しました")
    }
})

実行結果

  • 検索結果からファイルを選んで右クリックするだけ!
  • フォルダーをすぐ開いてドラッグ&ドロップも可能
  • ファイル整理やレビュー時に超便利!

まとめ

PowerShellのGUIに右クリック操作を加えると、まるでファイルマネージャのような使い心地に進化します。
自分仕様のツールに育てていけば、日常業務がもっとスマートになります!


次回予告

次回は、検索結果の一覧を**CSV形式でエクスポート(保存)**して、あとから一覧で確認・共有できる機能を追加してみましょう!


コメント

タイトルとURLをコピーしました