150 lines
4.9 KiB
PowerShell
150 lines
4.9 KiB
PowerShell
Add-Type -AssemblyName PresentationFramework
|
|
Add-Type -AssemblyName System.Windows.Forms
|
|
[System.Reflection.Assembly]::LoadWithPartialName('System.Drawing') | Out-Null
|
|
|
|
function Load_root {
|
|
[xml]$Form = Get-Content "$PSScriptRoot\root.xaml" -Encoding utf8
|
|
$NR=(New-Object System.Xml.XmlNodeReader $Form)
|
|
$window=[Windows.Markup.XamlReader]::Load($NR)
|
|
$Script:btncleaner = $window.FindName("btncleaner")
|
|
$Script:btnfile = $window.findName("btnfile")
|
|
$Script:btnok = $window.FindName("btnok")
|
|
$Script:tbcleaner = $window.FindName("tbcleaner")
|
|
$Script:tbfile = $window.FindName("tbfile")
|
|
$Script:cbo = $window.FindName("cbo")
|
|
$Script:cbb = $window.FindName("cbb")
|
|
$Script:cbv = $window.FindName("cbv")
|
|
$Script:cba = $window.FindName("cba")
|
|
return $window
|
|
}
|
|
$main = Load_root
|
|
|
|
$Script:btncleaner.Add_Click({
|
|
$Script:cleaner=Select-FolderDialog
|
|
if (test-path "$Script:cleaner\icons.csv") {
|
|
$Script:tbcleaner.Text = "Cleaner: $Script:Cleaner"
|
|
}else{
|
|
$Script:tbcleaner.Text = "Cleaner: not valid"
|
|
}
|
|
})
|
|
$Script:btnfile.Add_Click({
|
|
$Script:file=Select-FileDialog
|
|
$Script:tbfile.Text = "Icon: $Script:file"
|
|
})
|
|
$Script:btnok.Add_Click({
|
|
$csv=import-csv path $Script:Cleaner\icons.csv
|
|
$type=$null
|
|
Write-host "$Script:file"
|
|
$name = get_icon $Script:file
|
|
Export-Icon -Path $Script:file -Destination "$Script:Cleaner\icons\$name.ico"
|
|
if ($cbo.IsSelected) {
|
|
$type=0
|
|
}elseif ($cbb.IsSelected) {
|
|
$type=1
|
|
}elseif ($cbv.IsSelected) {
|
|
$type=2
|
|
}elseif ($cba.IsSelected) {
|
|
$type=3
|
|
}
|
|
$id=($csv.ID[-1])+1
|
|
$item = "$id,$name,$type"
|
|
$item | Export-Csv -Path "$Script:Cleaner\icons.csv" -Append
|
|
|
|
})
|
|
Function Select-FolderDialog{
|
|
param([string]$Description="Zielverzeichnis wählen",[string]$RootFolder="Desktop")
|
|
[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") |Out-Null
|
|
$objForm = New-Object System.Windows.Forms.FolderBrowserDialog
|
|
$objForm.Rootfolder = $RootFolder
|
|
$objForm.Description = $Description
|
|
$Show = $objForm.ShowDialog()
|
|
If ($Show -eq "OK"){
|
|
Return $objForm.SelectedPath
|
|
}else{
|
|
Return $false
|
|
}
|
|
}
|
|
|
|
Function Select-FileDialog{
|
|
[void] [System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms')
|
|
$OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog
|
|
if ($initialDirectory) { $OpenFileDialog.initialDirectory = $initialDirectory }
|
|
$OpenFileDialog.filter = 'All files (*.*)|*.*'
|
|
[void] $OpenFileDialog.ShowDialog()
|
|
return $OpenFileDialog.FileName
|
|
}
|
|
|
|
function get_icon {
|
|
param ($data)
|
|
$data = $data -replace '\s',''
|
|
$found = $false
|
|
for ($c = -1; $c -gt -10; $c--) {
|
|
$char = $data[$c]
|
|
if ($char -eq ".") {
|
|
$trim=$data.Length+$c
|
|
$trimdata=$data.Remove(0,$trim+1)
|
|
$c=-10
|
|
$found = $true
|
|
}
|
|
}
|
|
if (!$found) {
|
|
$return = 0
|
|
}else {
|
|
$return=$trimdata
|
|
}
|
|
return $return
|
|
}
|
|
|
|
function Export-Icon {
|
|
<#
|
|
.SYNOPSIS
|
|
Exports a file icon to a specified format.
|
|
.DESCRIPTION
|
|
Exports the icon associated with a while to a specified image format.
|
|
.NOTES
|
|
Author : Paul Broadwith (https://github.com/pauby)
|
|
History : 1.0 - 25/07/17 - Initial version.
|
|
.LINK
|
|
https://www.github.com/pauby
|
|
.EXAMPLE
|
|
Export-Icon -Path "C:\Windows\Notepad.exe"
|
|
|
|
Exports the icon for "C:\Windows\Notepad.exe" and saves it in bitmap
|
|
(BMP) format to "Notepad.bmp" in the current current directory.
|
|
|
|
.EXAMPLE
|
|
Export-Icon -Path "C:\Windows\Notepad.exe" `
|
|
-Destination "C:\Temp\Notepad-Icon.jpg" -Format JPEG
|
|
|
|
Exports the icon for "C:\Windows\Notepad.exe" and saves it in JPEG
|
|
format to "C:\Temp\Notepad-Icon.jpg"
|
|
#>
|
|
[CmdletBinding()]
|
|
Param (
|
|
# Path of the source file the icon is to be exported from.
|
|
[Parameter(Mandatory=$true)]
|
|
[string]$Path,
|
|
|
|
# Path to where the icon will be saved to. If this is blank or missing
|
|
# the file will be saved in the current directory with the basename of
|
|
# the $Path with the correct format extension.
|
|
[string]$Destination,
|
|
|
|
# Format to save the icon as. Defaults to a bitmap (BMP).
|
|
[System.Drawing.Imaging.ImageFormat]$Format = "Bmp"
|
|
)
|
|
|
|
if (!$Destination) {
|
|
$basename = (Get-Item $Path).BaseName
|
|
$extension = $format.ToString().ToLower()
|
|
$Destination = "$basename.$extension"
|
|
}
|
|
|
|
# Extract the icon from the source file.
|
|
$icon = [System.Drawing.Icon]::ExtractAssociatedIcon($Path)
|
|
|
|
# Save the icon in the specified format
|
|
$icon.ToBitmap().Save($Destination, [System.Drawing.Imaging.ImageFormat]::$Format)
|
|
}
|
|
|
|
$main.ShowDialog() | Out-Null |