Updating from CMSource
This commit is contained in:
142
SetUserFTA/2.5.2/Default PDF Picker/DefaultPDFPicker.ps1
Normal file
142
SetUserFTA/2.5.2/Default PDF Picker/DefaultPDFPicker.ps1
Normal file
@@ -0,0 +1,142 @@
|
||||
Add-Type -AssemblyName System.Windows.Forms
|
||||
|
||||
$SetFTAPath = "C:\ProgramData\SetUserFTA\SetUserFTA.exe"
|
||||
|
||||
# Prepare form early so we can use it as a message box owner
|
||||
$form = New-Object System.Windows.Forms.Form
|
||||
$form.Text = "Set Default PDF Application"
|
||||
$form.Size = New-Object System.Drawing.Size(400, 250)
|
||||
$form.StartPosition = "CenterScreen"
|
||||
$form.TopMost = $true
|
||||
|
||||
# Check if SetUserFTA.exe exists
|
||||
if (-not (Test-Path $SetFTAPath)) {
|
||||
[System.Windows.Forms.MessageBox]::Show($form, "SetUserFTA.exe not found.`nExpected at:`n$SetFTAPath", "Missing Dependency", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Error)
|
||||
$form.Close()
|
||||
return
|
||||
}
|
||||
|
||||
# Known ProgIDs and Friendly Names
|
||||
$friendlyMap = @{
|
||||
"AcroExch.Document.DC" = "Adobe Acrobat"
|
||||
"AcroExch.Document" = "Adobe Reader"
|
||||
"NitroPDF.Pro.v13" = "Nitro PDF Pro 13"
|
||||
"NitroPDF.Pro.v14" = "Nitro PDF Pro 14"
|
||||
"Bluebeam.Revu.PDF" = "Bluebeam Revu"
|
||||
"RedlinePDFfile" = "Bluebeam Revu PDF"
|
||||
"MSEdgePDF" = "Microsoft Edge"
|
||||
}
|
||||
|
||||
# Check if a ProgID exists in the registry
|
||||
function Is-ProgIDPresent($progId) {
|
||||
$paths = @(
|
||||
"HKCR:\$progId",
|
||||
"HKCU:\Software\Classes\$progId",
|
||||
"HKLM:\Software\Classes\$progId"
|
||||
)
|
||||
foreach ($path in $paths) {
|
||||
if (Test-Path $path) { return $true }
|
||||
}
|
||||
return $false
|
||||
}
|
||||
|
||||
# Get only installed PDF handlers
|
||||
function Get-InstalledPDFProgIDs {
|
||||
$installed = @()
|
||||
foreach ($progId in $friendlyMap.Keys) {
|
||||
if (Is-ProgIDPresent $progId) {
|
||||
$installed += $progId
|
||||
}
|
||||
}
|
||||
return $installed
|
||||
}
|
||||
|
||||
# Get current default handler
|
||||
function Get-CurrentPDFHandler {
|
||||
try {
|
||||
$userSID = ([System.Security.Principal.WindowsIdentity]::GetCurrent()).User.Value
|
||||
$keyPath = "Registry::HKEY_USERS\$userSID\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.pdf\UserChoice"
|
||||
if (Test-Path $keyPath) {
|
||||
return (Get-ItemProperty -Path $keyPath -Name ProgId).ProgId
|
||||
} else {
|
||||
return "Unknown"
|
||||
}
|
||||
} catch {
|
||||
return "Error"
|
||||
}
|
||||
}
|
||||
|
||||
# Set PDF default using SetUserFTA with a mapping file
|
||||
function Set-PDFDefaultHandler($progId) {
|
||||
try {
|
||||
$mapFile = Join-Path $env:TEMP "SetFTA.txt"
|
||||
"pdf $progId" | Out-File -FilePath $mapFile -Encoding ASCII -Force
|
||||
Start-Process -FilePath $SetFTAPath -ArgumentList "`"$mapFile`"" -Wait -NoNewWindow
|
||||
} catch {
|
||||
[System.Windows.Forms.MessageBox]::Show($form, "Failed to apply default:`n$_", "Error", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Error)
|
||||
}
|
||||
}
|
||||
|
||||
# Add controls
|
||||
$labelCurrent = New-Object System.Windows.Forms.Label
|
||||
$labelCurrent.Text = "Current Default Handler:"
|
||||
$labelCurrent.Location = New-Object System.Drawing.Point(20, 20)
|
||||
$labelCurrent.AutoSize = $true
|
||||
$form.Controls.Add($labelCurrent)
|
||||
|
||||
$labelCurrentValue = New-Object System.Windows.Forms.Label
|
||||
$labelCurrentValue.Text = Get-CurrentPDFHandler
|
||||
$labelCurrentValue.Location = New-Object System.Drawing.Point(180, 20)
|
||||
$labelCurrentValue.AutoSize = $true
|
||||
$form.Controls.Add($labelCurrentValue)
|
||||
|
||||
$comboBox = New-Object System.Windows.Forms.ComboBox
|
||||
$comboBox.Location = New-Object System.Drawing.Point(20, 60)
|
||||
$comboBox.Size = New-Object System.Drawing.Size(340, 20)
|
||||
$comboBox.DropDownStyle = "DropDownList"
|
||||
$form.Controls.Add($comboBox)
|
||||
|
||||
# Build dropdown from installed handlers
|
||||
$displayToProgID = @{}
|
||||
$installedProgIDs = Get-InstalledPDFProgIDs
|
||||
$currentHandler = Get-CurrentPDFHandler
|
||||
|
||||
foreach ($progId in $installedProgIDs) {
|
||||
$friendlyName = $friendlyMap[$progId]
|
||||
if (-not $friendlyName) { $friendlyName = $progId }
|
||||
$displayToProgID[$friendlyName] = $progId
|
||||
$comboBox.Items.Add($friendlyName)
|
||||
|
||||
if ($progId -eq $currentHandler) {
|
||||
$comboBox.SelectedItem = $friendlyName
|
||||
}
|
||||
}
|
||||
|
||||
# Apply Button
|
||||
$buttonApply = New-Object System.Windows.Forms.Button
|
||||
$buttonApply.Text = "Set as Default"
|
||||
$buttonApply.Location = New-Object System.Drawing.Point(20, 100)
|
||||
$buttonApply.Size = New-Object System.Drawing.Size(120, 30)
|
||||
$buttonApply.Add_Click({
|
||||
if ($comboBox.SelectedItem -and $comboBox.Enabled) {
|
||||
$selectedDisplayName = $comboBox.SelectedItem
|
||||
$selectedProgId = $displayToProgID[$selectedDisplayName]
|
||||
Set-PDFDefaultHandler $selectedProgId
|
||||
[System.Windows.Forms.MessageBox]::Show($form, "Default PDF app set to: $selectedDisplayName", "Success", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Information)
|
||||
$labelCurrentValue.Text = Get-CurrentPDFHandler
|
||||
} else {
|
||||
[System.Windows.Forms.MessageBox]::Show($form, "Please select an application.", "Error", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Error)
|
||||
}
|
||||
})
|
||||
$form.Controls.Add($buttonApply)
|
||||
|
||||
# Close Button
|
||||
$buttonClose = New-Object System.Windows.Forms.Button
|
||||
$buttonClose.Text = "Close"
|
||||
$buttonClose.Location = New-Object System.Drawing.Point(240, 100)
|
||||
$buttonClose.Size = New-Object System.Drawing.Size(120, 30)
|
||||
$buttonClose.Add_Click({ $form.Close() })
|
||||
$form.Controls.Add($buttonClose)
|
||||
|
||||
# Show GUI
|
||||
[void]$form.ShowDialog()
|
||||
Reference in New Issue
Block a user