# =======================
# launch_from_selection.ps1
# 自动读取 Explorer 当前选中项并启动父目录下的 EXE
# =======================

# 获取脚本所在目录（tools文件夹）
$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Definition

# 获取父目录（主程序目录）
$parentDir = Split-Path -Parent $scriptDir

# 在父目录下查找以"隐写者"开头、后缀为 .exe 的文件
$exe = Get-ChildItem -Path $parentDir -Filter "隐写者*.exe" -File -ErrorAction SilentlyContinue | Select-Object -First 1

if (-not $exe) {
    [System.Windows.Forms.MessageBox]::Show("未在父目录找到可执行程序（隐写者*.exe）。`n`n查找目录: $parentDir", "错误", 0, [System.Windows.Forms.MessageBoxIcon]::Error)
    exit
}

$exePath = $exe.FullName

# 收集 Explorer 当前选中的文件/文件夹
Add-Type -AssemblyName System.Collections
Add-Type -AssemblyName System.Windows.Forms
$shell = New-Object -ComObject Shell.Application
$sel = New-Object System.Collections.ArrayList

foreach ($w in $shell.Windows()) {
    try {
        $doc = $w.Document
        if ($doc -and $doc.SelectedItems()) {
            foreach ($it in $doc.SelectedItems()) {
                [void]$sel.Add($it.Path)
            }
        }
    } catch {}
}

# 如果没选中，从参数获取
if ($sel.Count -eq 0 -and $args.Count -gt 0) {
    foreach ($a in $args) { [void]$sel.Add($a) }
}

# 去重、过滤空行
$sel = $sel | Where-Object { $_ -and $_.Trim() } | Select-Object -Unique

# 打包参数（每个路径都加双引号防止空格被拆分）
$escaped = $sel | ForEach-Object { '"' + ($_ -replace '"','\"') + '"' }
$argLine = ($escaped -join ' ')

# 调用 EXE - 添加 -rb 参数表示批量解除隐写模式
if ($sel.Count -gt 0) {
    # 使用 -rb 参数启动批量解除隐写GUI模式
    Start-Process -FilePath $exePath -ArgumentList "-rb $argLine"
} else {
    # 无文件时直接启动GUI
    Start-Process -FilePath $exePath
}