mirror of
https://github.com/winapps-org/winapps.git
synced 2025-06-04 22:27:19 +02:00
Updated powershell script for icons and names
This commit is contained in:
parent
fe5e5f0b5d
commit
8e3c10edf5
@ -1,4 +1,4 @@
|
|||||||
# powershell.exe -ExecutionPolicy Bypass -File \\tsclient\home\Documents\Repos\winapps\install\ExtractPrograms.ps1
|
# powershell.exe -ExecutionPolicy Bypass -File \\tsclient\home\Documents\Repos\winapps\install\ExtractPrograms.ps1 > \\tsclient\home\.local\share\winapps\include
|
||||||
|
|
||||||
Function Get-Icon {
|
Function Get-Icon {
|
||||||
<#
|
<#
|
||||||
@ -205,160 +205,19 @@ Function Get-Icon {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Function Export-Icon {
|
"NAMES=()"
|
||||||
<#
|
"ICONS=()"
|
||||||
.SYNOPSIS
|
"EXES=()"
|
||||||
Export-Icon exports high-quality icons stored within .DLL and .EXE files.
|
|
||||||
|
|
||||||
.DESCRIPTION
|
|
||||||
Export-Icon can export to a number of formats, including ico, bmp, png, jpg, gif, emf, exif, icon, tiff, and wmf. In addition, it can also export to a different size.
|
|
||||||
|
|
||||||
This function quickly exports *all* icons stored within the resource file.
|
|
||||||
|
|
||||||
.PARAMETER Path
|
|
||||||
Path to the .dll or .exe
|
|
||||||
|
|
||||||
.PARAMETER Directory
|
|
||||||
Directory where the exports should be stored. If no directory is specified, all icons will be exported to the TEMP directory.
|
|
||||||
|
|
||||||
.PARAMETER Size
|
|
||||||
This specifies the pixel size of the exported icons. All icons will be squares, so if you want a 16x16 export, it would be -Size 16.
|
|
||||||
|
|
||||||
Valid sizes are 8, 16, 24, 32, 48, 64, 96, and 128. The default is 32.
|
|
||||||
|
|
||||||
.PARAMETER Type
|
|
||||||
This is the type of file you would like to export to. The default is .ico
|
|
||||||
|
|
||||||
Valid types are ico, bmp, png, jpg, gif, emf, exif, icon, tiff, and wmf. The default is ico.
|
|
||||||
|
|
||||||
.NOTES
|
|
||||||
Author: Chrissy LeMaire
|
|
||||||
Requires: PowerShell 3.0
|
|
||||||
Version: 2.0
|
|
||||||
DateUpdated: 2016-June-6
|
|
||||||
|
|
||||||
.LINK
|
|
||||||
https://gallery.technet.microsoft.com/scriptcenter/Export-Icon-from-DLL-and-9d309047
|
|
||||||
|
|
||||||
.EXAMPLE
|
|
||||||
Export-Icon C:\windows\system32\imageres.dll
|
|
||||||
|
|
||||||
Exports all icons stored witin C:\windows\system32\imageres.dll to $env:temp\icons. Creates directory if required and automatically opens output directory.
|
|
||||||
|
|
||||||
.EXAMPLE
|
|
||||||
Export-Icon -Path "C:\Program Files (x86)\VMware\Infrastructure\Virtual Infrastructure Client\Launcher\VpxClient.exe" -Size 64 -Type png -Directory C:\temp
|
|
||||||
|
|
||||||
Exports the high-quality icon within VpxClient.exe to a transparent png in C:\temp\. Resizes the exported image to 64x64. Creates directory if required
|
|
||||||
and automatically opens output directory.
|
|
||||||
|
|
||||||
|
|
||||||
#>
|
|
||||||
|
|
||||||
[CmdletBinding()]
|
|
||||||
Param(
|
|
||||||
[Parameter(Mandatory=$true)]
|
|
||||||
[string]$Path,
|
|
||||||
[string]$Directory,
|
|
||||||
[ValidateSet(8,16,24,32,48,64,96,128)]
|
|
||||||
[int]$Size = 32,
|
|
||||||
[ValidateSet("ico","bmp","png","jpg","gif", "jpeg", "emf", "exif", "icon", "tiff", "wmf")]
|
|
||||||
[string]$Type = "ico"
|
|
||||||
)
|
|
||||||
|
|
||||||
BEGIN {
|
|
||||||
|
|
||||||
# Thanks Thomas Levesque at http://bit.ly/1KmLgyN and darkfall http://git.io/vZxRK
|
|
||||||
$code = '
|
|
||||||
using System;
|
|
||||||
using System.Drawing;
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
using System.IO;
|
|
||||||
|
|
||||||
namespace System {
|
|
||||||
public class IconExtractor {
|
|
||||||
public static Icon Extract(string file, int number, bool largeIcon) {
|
|
||||||
IntPtr large;
|
|
||||||
IntPtr small;
|
|
||||||
ExtractIconEx(file, number, out large, out small, 1);
|
|
||||||
try { return Icon.FromHandle(largeIcon ? large : small); }
|
|
||||||
catch { return null; }
|
|
||||||
}
|
|
||||||
[DllImport("Shell32.dll", EntryPoint = "ExtractIconExW", CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
|
|
||||||
private static extern int ExtractIconEx(string sFile, int iIndex, out IntPtr piLargeVersion, out IntPtr piSmallVersion, int amountIcons);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class PngIconConverter
|
|
||||||
{
|
|
||||||
public static bool Convert(System.IO.Stream input_stream, System.IO.Stream output_stream, int size, bool keep_aspect_ratio = false)
|
|
||||||
{
|
|
||||||
System.Drawing.Bitmap input_bit = (System.Drawing.Bitmap)System.Drawing.Bitmap.FromStream(input_stream);
|
|
||||||
if (input_bit != null)
|
|
||||||
{
|
|
||||||
int width, height;
|
|
||||||
if (keep_aspect_ratio)
|
|
||||||
{
|
|
||||||
width = size;
|
|
||||||
height = input_bit.Height / input_bit.Width * size;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
width = height = size;
|
|
||||||
}
|
|
||||||
System.Drawing.Bitmap new_bit = new System.Drawing.Bitmap(input_bit, new System.Drawing.Size(width, height));
|
|
||||||
if (new_bit != null)
|
|
||||||
{
|
|
||||||
System.IO.MemoryStream mem_data = new System.IO.MemoryStream();
|
|
||||||
new_bit.Save(mem_data, System.Drawing.Imaging.ImageFormat.Png);
|
|
||||||
|
|
||||||
System.IO.BinaryWriter icon_writer = new System.IO.BinaryWriter(output_stream);
|
|
||||||
if (output_stream != null && icon_writer != null)
|
|
||||||
{
|
|
||||||
icon_writer.Write((byte)0);
|
|
||||||
icon_writer.Write((byte)0);
|
|
||||||
icon_writer.Write((short)1);
|
|
||||||
icon_writer.Write((short)1);
|
|
||||||
icon_writer.Write((byte)width);
|
|
||||||
icon_writer.Write((byte)height);
|
|
||||||
icon_writer.Write((byte)0);
|
|
||||||
icon_writer.Write((byte)0);
|
|
||||||
icon_writer.Write((short)0);
|
|
||||||
icon_writer.Write((short)32);
|
|
||||||
icon_writer.Write((int)mem_data.Length);
|
|
||||||
icon_writer.Write((int)(6 + 16));
|
|
||||||
icon_writer.Write(mem_data.ToArray());
|
|
||||||
icon_writer.Flush();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static bool Convert(string input_image, string output_icon, int size, bool keep_aspect_ratio = false)
|
|
||||||
{
|
|
||||||
System.IO.FileStream input_stream = new System.IO.FileStream(input_image, System.IO.FileMode.Open);
|
|
||||||
System.IO.FileStream output_stream = new System.IO.FileStream(output_icon, System.IO.FileMode.OpenOrCreate);
|
|
||||||
|
|
||||||
bool result = Convert(input_stream, output_stream, size, keep_aspect_ratio);
|
|
||||||
|
|
||||||
input_stream.Close();
|
|
||||||
output_stream.Close();
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
'
|
|
||||||
|
|
||||||
Add-Type -TypeDefinition $code -ReferencedAssemblies System.Drawing, System.IO -ErrorAction SilentlyContinue
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\*" |
|
Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\*" |
|
||||||
Select-Object -Property "(default)" -Unique |
|
Select-Object -Property "(default)" -Unique |
|
||||||
Where-Object {$_."(default)" -ne $null} |
|
Where-Object {$_."(default)" -ne $null} |
|
||||||
ForEach-Object {
|
ForEach-Object {
|
||||||
$Icon = Get-Icon -Path $_."(default)".Trim('"') -ToBase64
|
$Exe = $_."(default)".Trim('"')
|
||||||
|
$Name = (Get-Item $Exe).VersionInfo.FileDescription.Trim() -replace " "," "
|
||||||
|
$Icon = Get-Icon -Path $Exe -ToBase64
|
||||||
|
#Get-ItemProperty $Exe -Name VersionInfo
|
||||||
|
"NAMES+=(""$Name"")"
|
||||||
|
"EXES+=(""$Exe"")"
|
||||||
|
"ICONS+=(""$Icon"")"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user