# Script to set ImageGlass as default for specified file types $fileTypes = @(".png", ".jpg", ".jpeg", ".webp", ".gif", ".tiff", ".bmp", ".heif", ".heic") $setUserFtaPath = "C:\Scripts\Software\setuserfta.exe" $imageGlassPath = "C:\Program Files\ImageGlass\igcmd.exe" $imageGlassRegistryPath = "HKCU:\Software\ImageGlass\Capabilities\FileAssociations" # Function to check and set default app for a file type function Set-DefaultAppIfNeeded { param( [string]$fileType ) try { # Get the current default app for the file type $currentDefault = (Get-ItemProperty "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\$fileType\UserChoice" -ErrorAction SilentlyContinue).ProgId # Check if ImageGlass is not the default if ($currentDefault -ne "ImageGlass") { Write-Host "Setting ImageGlass as default for $fileType" # Ensure setuserfta.exe path exists if (-not (Test-Path $setUserFtaPath)) { Write-Error "setuserfta.exe not found at $setUserFtaPath" return } # Run setuserfta.exe to set ImageGlass as default Start-Process $setUserFtaPath -ArgumentList "`"$fileType`" ImageGlass" -Wait -NoNewWindow } else { Write-Host "ImageGlass is already the default for $fileType" } } catch { Write-Error "Error processing $fileType`: $_" } } # Check if ImageGlass command for setting defaults is needed function Test-ImageGlassFileAssociations { # Check if the registry path exists if (-not (Test-Path $imageGlassRegistryPath)) { Write-Host "ImageGlass registry path does not exist." return $true } # Check each file type $missingAssociations = $false foreach ($type in $fileTypes) { try { # Try to get the property value directly $associationValue = Get-ItemPropertyValue -Path $imageGlassRegistryPath -Name $type -ErrorAction Stop # If we get here and the value is null or empty, consider it missing if ([string]::IsNullOrWhiteSpace($associationValue)) { Write-Host "Empty association for $type" $missingAssociations = $true } } catch { Write-Host "No association found for $type" $missingAssociations = $true } } return $missingAssociations } # Process each file type foreach ($type in $fileTypes) { Set-DefaultAppIfNeeded -fileType $type } # Check if global defaults need to be set if (Test-ImageGlassFileAssociations) { Write-Host "Setting global defaults for ImageGlass" Start-Process "$imageGlassPath" -ArgumentList "set-default-viewer .png;.jpg;.jpeg;.webp;.gif;.tiff;.bmp;.heif;.heic" -Wait -NoNewWindow } else { Write-Host "ImageGlass file associations are already completely configured." } Write-Host "File type default app check completed."