Skip to content

Instantly share code, notes, and snippets.

View scriptingstudio's full-sized avatar
👍
Awake and ready

Matthew Gray scriptingstudio

👍
Awake and ready
  • Interstellar Systems
  • Hiranyaloka
View GitHub Profile
@scriptingstudio
scriptingstudio / icoreader.py
Last active August 16, 2026 20:18
ICO reader in Python demo
import struct
import ctypes
import re
user32 = ctypes.WinDLL(r'C:\Windows\System32\user32.dll')
icofile = r'<filepath_to_your_icofile>' # set your file name!!!
print(icofile)
with open(icofile, 'rb') as f:
data = f.read()
@scriptingstudio
scriptingstudio / icoreader.ps1
Last active August 8, 2026 12:53
ICO Reader with export capability demo
<#
.SYNOPSIS
ICO file reader.
.DESCRIPTION
An AIO function to read and export icons stored within .ICO files. Read-Ico can export high-quality icons of all sizes, and all color formats to a number of formats, including ico, png, jpg, and gif.
Key features:
- Multisize high-quality ICO
- Ability to create a separate ICO for each size at once
- ICO integrity check
- Ability interactively select image file
@scriptingstudio
scriptingstudio / icoconverter-win.ps1
Last active August 3, 2026 06:32
ICO to PNG converter demo for Windows PowerShell
function Convert-IcoToPng ([string]$icofile) {
# Runtime validation
if ($PSVersionTable.PSEdition -eq 'Core') {return}
if (-not $icofile -or -not (Test-Path $icofile)) {return}
# ICO validation
$signature = Get-Content -Path $icofile -Encoding Byte -TotalCount 6 -ErrorAction 0
if (([System.BitConverter]::ToInt32(($signature[0..3]),0)) -ne 0x10000) {return}
if (([System.BitConverter]::ToInt16(($signature[4,5]),0)) -gt 1) {return} # single-size
Add-Type -AssemblyName System.Runtime.WindowsRuntime
@scriptingstudio
scriptingstudio / percentbar.ps1
Last active August 1, 2026 06:57
Colorful percent bar demo
function New-PercentBar {
[cmdletbinding()]
param (
[parameter(ValueFromPipeline)]
[alias('inputobject')][decimal[]] $value,
[alias('range')][decimal] $scale,
[int] $barlength,
[consolecolor] $color,
[switch] $hint
)
@scriptingstudio
scriptingstudio / Show-Progress.ps1
Last active July 27, 2026 15:28
Yet another PowerShell inline progress bar
function Show-Progress {
param (
[scriptblock] $scriptblock,
[int] $width,
[consolecolor] $color,
[string] $type, # growth | fill | bounce | tide
[switch] $passthru
)
if (-not $scriptblock) {return}
if ($width -lt 1) {$width = 10}
function prompt {
function Get-LastCmdTime {
$diffPromptTime = $null
$lastCmd = Get-History -Count 1
if ($lastCmd -ne $null) {
$diff = $lastCmd.EndExecutionTime - $lastCmd.StartExecutionTime
$msfractional = $diff.TotalMilliseconds - [Math]::Truncate($diff.TotalMilliseconds)
$ms = $msfractional + $diff.Milliseconds
if ($diff.Hours) {'{0}h:{1}m:{2}s:{3:N2}ms' -f $diff.Hours,$diff.Minutes,$diff.Seconds,$ms}
elseif ($diff.Minutes) {'{0}m:{1}s:{2:N2}ms' -f $diff.Minutes,$diff.Seconds,$ms}
@scriptingstudio
scriptingstudio / import-icon.ps1
Last active July 22, 2026 18:19
PowerShell 7.6+ demo to extract an icon with all native and custom sizes
# Windows Powershell doesn't have [System.Drawing.Icon]::ExtractIcon method
# Neither ExtractIcon* functions from user32.dll have a parameter associated with size
Add-Type -AssemblyName System.Drawing
$Path = 'C:\windows\system32\WindowsPowerShell\v1.0\PowerShell.exe'
function import-icon ([string]$file, [int]$index=0, [int[]]$sizes) {
#if ([version]'7.6' -gt $PSVersionTable.PSVersion) {return}
if (-not $file) {return} # -or -not (Test-Path $file -ErrorAction 0)
if ($sizes.count) { # normalize sizes
$sizes = @($sizes | Where-Object {$_ -gt 7 -and $_ -lt 257} | Sort-Object -Unique)
@scriptingstudio
scriptingstudio / iconhelper.cs
Last active August 26, 2026 06:02
Yet another icon extractor from DLL,EXE,ICO for C#, PowerShell, and Python
/*
Synopsis : A utility class that extracts the list of all icons handles (all sizes, all color counts) for a binary file like DLL, EXE, or ICO
Version : 3.1
Lastupdate : 2026-Aug-11
// get amount of icons stored in a dll
var icons = IconReader.GetTotal(@"c:\windows\system32\imageres.dll");
// get all icons handles with index 0 from a dll
var icons = IconReader.ImportIcons(@"c:\windows\system32\shell32.dll", 0);
@scriptingstudio
scriptingstudio / Convert-SvgToIco.ps1
Last active July 28, 2026 10:42
Simple SVG to ICO converter
<#
.SYNOPSIS
SVG to Windows ICO converter.
.DESCRIPTION
The script uses Inkscape app to convert SVG to PNG and then ensembles PNGs to a single ICO using .NET.
Key features:
- Multisize ICO
- Just one Inkscape instance per multiple size conversions, i.e. a conversion time is independent on amount of sizes
- Control over SVG exported area
- Ability to replace colors in SVG
@scriptingstudio
scriptingstudio / Export-Icon.ps1
Last active July 21, 2026 19:01
Simple image extractor from exe/dll/osx/cpl files
<#
.SYNOPSIS
An AIO function to export icons stored within .DLL and .EXE files.
.DESCRIPTION
Export-Icon can export icons of all sizes, and all color formats to a number of formats, including bmp, png, jpg, gif, emf, exif, icon, tiff, heif, and webp. In addition, it can also export to a different size. All sizes are native, no scaling, except custom sizes.
This function quickly exports *all* icons stored within the resource file.
Export-Icon is independent on .NET version. It uses a custom icon extractor engine because Windows PowerShell doesn't have [System.Drawing.Icon]::ExtractIcon method (https://learn.microsoft.com/en-us/dotnet/api/system.drawing.icon?view=netframework-4.8.1). In addition, PowerShell 7.6+ [System.Drawing.Icon]::ExtractIcon method has a limited capability. Besides, neither ExtractIcon* functions from user32.dll have a parameter associated with size.
.PARAMETER Path
Mandatory. Position is 0. Specifies a filepath to the resource.
.PARAMETER Output