Skip to content

Remove transparent icons#7

Merged
m417z merged 1 commit intogh-pagesfrom
remove-transparent-icons
Oct 4, 2025
Merged

Remove transparent icons#7
m417z merged 1 commit intogh-pagesfrom
remove-transparent-icons

Conversation

@m417z
Copy link
Member

@m417z m417z commented Oct 4, 2025

Scripts used:

Details

clean_rc.py

#!/usr/bin/env python3
"""
Command-line tool to check if an icon is fully transparent.
An icon is considered fully transparent if all pixels in all resolution images
have an alpha (transparency) value of at most 5 (out of 256).
"""

import sys
import os
import re
import argparse
from pathlib import Path
from PIL import Image


def get_icon_transparency(icon_path):
    """
    Get the maximum alpha value across all pixels in all resolution images.

    Args:
        icon_path: Path to the .ico file

    Returns:
        Maximum alpha value (0-255) found across all pixels in all images
    """
    # Open the icon file
    icon = Image.open(icon_path)

    # ICO files can contain multiple images at different resolutions
    # We need to check all of them
    max_alpha = 0

    # Try to iterate through all images in the ICO file
    try:
        while True:
            # Convert to RGBA to ensure we have alpha channel
            img_rgba = icon.convert('RGBA')

            # Get pixel data
            pixels = img_rgba.load()
            if not pixels:
                raise ValueError("Failed to load pixel data.")
            width, height = img_rgba.size

            # Check each pixel's alpha value
            for y in range(height):
                for x in range(width):
                    r, g, b, a = pixels[x, y]
                    max_alpha = max(max_alpha, a)

            # Move to next image in the ICO file
            icon.seek(icon.tell() + 1)

    except EOFError:
        # No more images in the ICO file
        pass

    return max_alpha


def is_icon_fully_transparent(icon_path, threshold=5):
    """
    Check if an icon is fully transparent across all its resolution images.

    Args:
        icon_path: Path to the .ico file
        threshold: Maximum alpha value (0-255) to consider transparent

    Returns:
        True if all pixels in all images have alpha <= threshold, False otherwise
    """
    max_alpha = get_icon_transparency(icon_path)
    return max_alpha <= threshold


def process_icon(icon_path, threshold=5):
    """
    Process a single icon file and print the result.

    Args:
        icon_path: Path to the .ico file
        threshold: Maximum alpha value (0-255) to consider transparent
    """
    # Get the maximum alpha value
    max_alpha = get_icon_transparency(icon_path)

    # Check if the icon is fully transparent
    is_transparent = max_alpha <= threshold

    if is_transparent:
        print(f"✓ '{icon_path}' is fully transparent (a: {max_alpha}).")
    else:
        print(f"✗ '{icon_path}' is NOT fully transparent (a: {max_alpha}).")

    return is_transparent, max_alpha


def process_directory(directory_path, threshold=5):
    """
    Process all .ico files in a directory.

    Args:
        directory_path: Path to the directory containing .ico files
        threshold: Maximum alpha value (0-255) to consider transparent
    """
    dir_path = Path(directory_path)

    if not dir_path.exists():
        print(f"Error: Directory not found: {directory_path}", file=sys.stderr)
        sys.exit(1)

    if not dir_path.is_dir():
        print(f"Error: Path is not a directory: {directory_path}", file=sys.stderr)
        sys.exit(1)

    # Find all .ico files in the directory
    ico_files = sorted(dir_path.glob("*.ico"))

    if not ico_files:
        print(f"No .ico files found in: {directory_path}")
        return

    print(f"Processing {len(ico_files)} icon file(s) in '{directory_path}':\n")

    transparent_count = 0
    non_transparent_count = 0

    for ico_file in ico_files:
        is_transparent, max_alpha = process_icon(str(ico_file), threshold)
        if is_transparent is not None:
            if is_transparent:
                transparent_count += 1
            else:
                non_transparent_count += 1

    print(f"\n--- Summary ---")
    print(f"Total files processed: {transparent_count + non_transparent_count}")
    print(f"Fully transparent: {transparent_count}")
    print(f"Not fully transparent: {non_transparent_count}")


def clean_rc_file(rc_file_path, threshold=5, dry_run=False):
    """
    Clean an RC file by removing transparent icon entries and deleting the icon files.

    Args:
        rc_file_path: Path to the .rc file
        threshold: Maximum alpha value (0-255) to consider transparent
        dry_run: If True, only report what would be done without making changes
    """
    rc_path = Path(rc_file_path)

    if not rc_path.exists():
        print(f"Error: RC file not found: {rc_file_path}", file=sys.stderr)
        sys.exit(1)

    if not rc_path.is_file():
        print(f"Error: Path is not a file: {rc_file_path}", file=sys.stderr)
        sys.exit(1)

    # Read the RC file - try different encodings
    encodings = ['utf-8', 'utf-16', 'utf-16-le', 'utf-16-be', 'latin-1', 'cp1252']
    lines = None
    used_encoding = None

    for encoding in encodings:
        try:
            with open(rc_path, 'r', encoding=encoding) as f:
                lines = f.readlines()
            used_encoding = encoding
            break
        except (UnicodeDecodeError, UnicodeError):
            continue

    if lines is None:
        print(
            f"Error: Could not decode RC file with any known encoding", file=sys.stderr
        )
        sys.exit(1)

    # Get the directory where the RC file is located (icon paths are relative to this)
    rc_dir = rc_path.parent

    # Pattern to match ICON lines: <ID> ICON "<filename>"
    icon_pattern = re.compile(r'^(\S+)\s+ICON\s+"([^"]+)"', re.IGNORECASE)

    new_lines = []
    removed_count = 0
    kept_count = 0
    icons_to_delete = []

    print(f"Processing RC file: {rc_file_path}\n")

    for line in lines:
        match = icon_pattern.match(line.strip())

        if match:
            icon_id = match.group(1)
            icon_filename = match.group(2)
            icon_full_path = rc_dir / icon_filename

            # Check if the icon file exists
            max_alpha = get_icon_transparency(str(icon_full_path))
            is_transparent = max_alpha <= threshold

            if is_transparent:
                print(
                    f"  ✗ Removing: {icon_id}->{icon_filename} (a:"
                    f" {max_alpha})"
                )
                removed_count += 1
                icons_to_delete.append(icon_full_path)
                # Skip this line (don't add to new_lines)
                # Also skip the following blank line if present
                continue
            else:
                print(
                    f"  ✓ Keeping:  {icon_id}->{icon_filename} (a:"
                    f" {max_alpha})"
                )
                kept_count += 1
                new_lines.append(line)
        else:
            # Keep non-ICON lines (comments, blank lines, etc.)
            # But skip blank lines that immediately follow a removed icon
            if line.strip() == '' and new_lines and new_lines[-1].strip() == '':
                # Skip duplicate blank lines
                continue
            new_lines.append(line)

    # Remove trailing blank lines
    while new_lines and new_lines[-1].strip() == '':
        new_lines.pop()

    print(f"\n--- Summary ---")
    print(f"Icons kept: {kept_count}")
    print(f"Icons to remove: {removed_count}")

    if dry_run:
        print("\n[DRY RUN] No changes were made.")
        if icons_to_delete:
            print("\nIcons that would be deleted:")
            for icon_path in icons_to_delete:
                print(f"  - {icon_path}")
    else:
        # Write the updated RC file with the same encoding
        with open(rc_path, 'w', encoding=used_encoding) as f:
            f.writelines(new_lines)
        print(f"\n✓ Updated RC file: {rc_file_path} (encoding: {used_encoding})")

        # Delete the transparent icon files
        if icons_to_delete:
            print(f"\nDeleting {len(icons_to_delete)} transparent icon file(s):")
            for icon_path in icons_to_delete:
                try:
                    os.remove(icon_path)
                    print(f"  ✓ Deleted: {icon_path}")
                except Exception as e:
                    print(f"  ✗ Error: Failed to delete {icon_path}: {e}", file=sys.stderr)

        print(f"\n✓ Cleanup complete!")

    return removed_count > 0


def main():
    """Main entry point for the command-line tool."""
    parser = argparse.ArgumentParser(
        description='Check if icon files are fully transparent or clean an RC file.',
        formatter_class=argparse.RawDescriptionHelpFormatter,
        epilog='''
Examples:
  Check a single icon:
    python test.py icons/ICON2_1.ico
  
  Check all icons in a directory:
    python test.py icons/
  
  Clean an RC file (dry run):
    python test.py --clean-rc extracted.rc --dry-run
  
  Clean an RC file (actually remove transparent icons):
    python test.py --clean-rc extracted.rc
        ''',
    )

    parser.add_argument('path', nargs='?', help='Path to an icon file or directory')
    parser.add_argument(
        '--clean-rc',
        metavar='RC_FILE',
        help='Clean an RC file by removing transparent icons',
    )
    parser.add_argument(
        '--dry-run',
        action='store_true',
        help='Show what would be done without making changes (use with --clean-rc)',
    )
    parser.add_argument(
        '--threshold',
        type=int,
        default=5,
        help='Maximum alpha value to consider transparent (default: 5)',
    )

    args = parser.parse_args()

    # Handle --clean-rc mode
    if args.clean_rc:
        clean_rc_file(args.clean_rc, threshold=args.threshold, dry_run=args.dry_run)
        return

    # Regular mode requires a path argument
    if not args.path:
        parser.print_help()
        sys.exit(1)

    path = args.path

    # Check if the path is a directory or a file
    if os.path.isdir(path):
        # Process all .ico files in the directory
        process_directory(path, threshold=args.threshold)
    elif os.path.isfile(path):
        # Process a single icon file
        process_icon(path, threshold=args.threshold)
    else:
        print(f"Error: Path not found: {path}", file=sys.stderr)
        sys.exit(1)


if __name__ == "__main__":
    main()

resource_dll_repack.py

import argparse
import shutil
import subprocess
import sys
import tempfile
from pathlib import Path
from typing import Optional

from clean_rc import clean_rc_file

# Tool paths
RESOURCE_HACKER = Path(R"C:\Program Files (x86)\Resource Hacker\ResourceHacker.exe")
RC_COMPILER = Path(R"C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x64\rc.exe")
CVTRES = Path(R"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\bin\Hostx64\x64\cvtres.exe")
LINKER = Path(R"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\bin\Hostx64\x64\link.exe")


def extract_resources(dll_path: Path, output_rc_path: Path)->bool:
    """
    Extract resources from a DLL file to an .rc file using Resource Hacker.

    Args:
        dll_path: Path to the input DLL file
        output_rc_path: Path where the .rc file will be saved

    Returns:
        True if successful, False otherwise
    """
    if not RESOURCE_HACKER.exists():
        print(f"Error: Resource Hacker not found at {RESOURCE_HACKER}")
        return False

    if not dll_path.exists():
        print(f"Error: DLL file not found at {dll_path}")
        return False

    # Create output directory if it doesn't exist
    output_rc_path.parent.mkdir(parents=True, exist_ok=True)

    cmd = [
        str(RESOURCE_HACKER),
        "-open", str(dll_path),
        "-save", str(output_rc_path),
        "-action", "extract",
        "-mask", ",,"
    ]

    print(f"Extracting resources from {dll_path}...")
    result = subprocess.run(cmd, capture_output=True, text=True)

    if result.returncode == 0 and output_rc_path.exists():
        print(f"Successfully extracted resources to {output_rc_path}")
        return True
    else:
        print(f"Error extracting resources:")
        if result.stdout:
            print(f"stdout: {result.stdout}")
        if result.stderr:
            print(f"stderr: {result.stderr}")
        return False


def compile_resources(rc_path: Path, output_dll_path: Path, working_dir: Optional[Path] = None)->bool:
    """
    Compile resources from an .rc file into a new DLL.

    Args:
        rc_path: Path to the .rc file
        output_dll_path: Path where the output DLL will be saved
        working_dir: Working directory for compilation (defaults to rc file directory)

    Returns:
        True if successful, False otherwise
    """
    if not rc_path.exists():
        print(f"Error: RC file not found at {rc_path}")
        return False

    if working_dir is None:
        working_dir = rc_path.parent

    res_file = working_dir / "resources.res"
    obj_file = working_dir / "resources.res.obj"

    try:
        # Step 1: Compile .rc to .res
        print(f"Compiling {rc_path} to .res...")
        cmd_rc = [str(RC_COMPILER), "/fo", str(res_file), str(rc_path)]
        result = subprocess.run(cmd_rc, cwd=str(working_dir), capture_output=True, text=True)

        if result.returncode != 0:
            print(f"Error compiling RC file:")
            if result.stdout:
                print(f"stdout: {result.stdout}")
            if result.stderr:
                print(f"stderr: {result.stderr}")
            return False

        # Step 2: Convert .res to .obj
        print(f"Converting .res to .obj...")
        cmd_cvtres = [str(CVTRES), "/MACHINE:X86", f"/OUT:{obj_file}", str(res_file)]
        result = subprocess.run(cmd_cvtres, cwd=str(working_dir), capture_output=True, text=True)

        if result.returncode != 0:
            print(f"Error converting RES file:")
            if result.stdout:
                print(f"stdout: {result.stdout}")
            if result.stderr:
                print(f"stderr: {result.stderr}")
            return False

        # Step 3: Link .obj to .dll
        print(f"Linking .obj to DLL...")
        cmd_link = [
            str(LINKER),
            "/DLL",
            "/NOENTRY",
            f"/OUT:{output_dll_path}",
            str(obj_file),
            "/MACHINE:X86",
            "/DEBUG:NONE",
            "/EMITPOGOPHASEINFO",
            "/EMITVOLATILEMETADATA:NO"
        ]
        result = subprocess.run(cmd_link, cwd=str(working_dir), capture_output=True, text=True)

        if result.returncode != 0:
            print(f"Error linking DLL:")
            if result.stdout:
                print(f"stdout: {result.stdout}")
            if result.stderr:
                print(f"stderr: {result.stderr}")
            return False

        print(f"Successfully created DLL at {output_dll_path}")
        return True

    except Exception as e:
        print(f"Error during compilation: {e}")
        return False
    finally:
        # Clean up intermediate files
        for temp_file in [res_file, obj_file]:
            if temp_file.exists():
                try:
                    temp_file.unlink()
                except:
                    pass


def repack_dll(dll_path: Path)->bool:
    """
    Extract resources from a DLL to a temp folder, then recompile it.

    Args:
        dll_path: Path to the DLL file to repack

    Returns:
        True if successful, False otherwise
    """
    dll_path = dll_path.resolve()

    # Create a temporary directory
    temp_dir = Path(tempfile.mkdtemp(prefix="dll_repack_"))
    print(f"Using temporary directory: {temp_dir}")

    try:
        # Extract resources
        rc_path = temp_dir / "extracted.rc"
        if not extract_resources(dll_path, rc_path):
            return False

        try:
            if not clean_rc_file(rc_path):
                print("No resources were removed during cleaning")
                return True
        except Exception as e:
            print(f"Error cleaning RC file: {e}")
            return False

        # Compile resources to new DLL
        if not compile_resources(rc_path, dll_path, working_dir=temp_dir):
            return False

        print(f"\nRepacking complete: {dll_path}")
        return True

    finally:
        # Clean up temp directory
        try:
            shutil.rmtree(temp_dir)
            print(f"Cleaned up temporary directory")
        except Exception as e:
            print(f"Warning: Could not remove temp directory {temp_dir}: {e}")


def repack_folder(folder_path: Path)->bool:
    """
    Extract and recompile all DLL files in a folder.

    Args:
        folder_path: Path to the folder containing DLL files

    Returns:
        True if all DLLs were processed successfully, False otherwise
    """
    if not folder_path.is_dir():
        print(f"Error: {folder_path} is not a directory")
        return False

    # Find all DLL files in the folder
    dll_files = list(folder_path.rglob("*.dll"))

    if not dll_files:
        print(f"No DLL files found in {folder_path}")
        return False

    print(f"Found {len(dll_files)} DLL file(s) in {folder_path}")
    print("=" * 80)

    success_count = 0
    fail_count = 0

    for dll_file in dll_files:
        print(f"\nProcessing: {dll_file.name}")
        print("-" * 80)
        if repack_dll(dll_file):
            success_count += 1
        else:
            fail_count += 1
        print("=" * 80)

    print(f"\n\nSummary:")
    print(f"  Total DLLs processed: {len(dll_files)}")
    print(f"  Successful: {success_count}")
    print(f"  Failed: {fail_count}")

    return fail_count == 0


def main()->int:
    parser = argparse.ArgumentParser(
        description="Extract and recompile resources from DLL files"
    )
    parser.add_argument(
        "path",
        help="Path to the DLL file or folder containing DLL files to repack"
    )
    parser.add_argument(
        "-f", "--folder",
        action="store_true",
        help="Process all DLL files in the specified folder"
    )

    args = parser.parse_args()
    input_path = Path(args.path)

    if not input_path.exists():
        print(f"Error: Path not found: {input_path}")
        return 1

    # Process as folder if --folder flag is set or if path is a directory
    if args.folder or input_path.is_dir():
        success = repack_folder(input_path)
    else:
        # Process as single file
        if not input_path.is_file():
            print(f"Error: {input_path} is not a file")
            return 1
        success = repack_dll(input_path)

    return 0 if success else 1


if __name__ == "__main__":
    sys.exit(main())

Operation log:

Details

Extracting resources from \Tokyo Night blank\Windhawk Resources\imageres.dll...

SHIDI_SHIELD_INTERNAL->SHIDI_SHIELD_INTERNAL.ico (a: 1)
25->ICON25_1.ico (a: 1)
27->ICON27_1.ico (a: 1)
67->ICON67_1.ico (a: 1)
78->ICON78_1.ico (a: 1)
86->ICON86_1.ico (a: 1)
87->ICON87_1.ico (a: 1)
88->ICON88_1.ico (a: 1)
109->ICON109_1.ico (a: 1)
116->ICON116_1.ico (a: 1)
117->ICON117_1.ico (a: 1)
120->ICON120_1.ico (a: 1)
130->ICON130_1.ico (a: 1)
144->ICON144_1.ico (a: 1)
148->ICON148_1.ico (a: 1)
150->ICON150_1.ico (a: 1)
151->ICON151_1.ico (a: 1)
152->ICON152_1.ico (a: 1)
165->ICON165_1.ico (a: 1)
167->ICON167_1.ico (a: 1)
195->ICON195_1.ico (a: 1)
196->ICON196_1.ico (a: 1)
197->ICON197_1.ico (a: 1)
1023->ICON1023_1.ico (a: 1)
1024->ICON1024_1.ico (a: 1)

--- Summary ---
Icons kept: 197
Icons to remove: 25
================================================================================

Extracting resources from \Tokyo Night blank\Windhawk Resources\shell32.dll...

51380->ICON51380_1.ico (a: 1)

--- Summary ---
Icons kept: 0
Icons to remove: 1
================================================================================

Extracting resources from \Tango\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \Tangerine\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \Sweetness Purple folders\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \Sweetness Pink folders\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \Sweetness Original\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \Sweetness Neutral\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \Sweetness Blue folders\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \Sweet Awesomeness\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \Super Remix Slate\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 217
Icons to remove: 2
================================================================================

Extracting resources from \Super Remix Green\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 217
Icons to remove: 2
================================================================================

Extracting resources from \Super Remix Blue\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 217
Icons to remove: 2
================================================================================

Extracting resources from \Somatic Rebirth\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \Solus\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \SLATE Symbolic\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \SLATE\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \Pure for light themes\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \Pure for dark or dark side panel themes\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \post\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \pink folders\Windhawk Resources\imageres.dll...

SHIDI_FLIP3D->SHIDI_FLIP3D.ico (a: 2)
SHIDI_SHIELD_INTERNAL->SHIDI_SHIELD_INTERNAL.ico (a: 2)
2->ICON2_1.ico (a: 2)
14->ICON14_1.ico (a: 2)
15->ICON15_1.ico (a: 2)
19->ICON19_1.ico (a: 2)
20->ICON20_1.ico (a: 2)
21->ICON21_1.ico (a: 2)
22->ICON22_1.ico (a: 2)
23->ICON23_1.ico (a: 2)
24->ICON24_1.ico (a: 2)
25->ICON25_1.ico (a: 2)
26->ICON26_1.ico (a: 2)
27->ICON27_1.ico (a: 2)
28->ICON28_1.ico (a: 2)
29->ICON29_1.ico (a: 2)
30->ICON30_1.ico (a: 2)
31->ICON31_1.ico (a: 2)
32->ICON32_1.ico (a: 2)
33->ICON33_1.ico (a: 2)
34->ICON34_1.ico (a: 2)
35->ICON35_1.ico (a: 2)
36->ICON36_1.ico (a: 2)
37->ICON37_1.ico (a: 2)
38->ICON38_1.ico (a: 2)
39->ICON39_1.ico (a: 2)
40->ICON40_1.ico (a: 2)
41->ICON41_1.ico (a: 2)
42->ICON42_1.ico (a: 2)
43->ICON43_1.ico (a: 2)
44->ICON44_1.ico (a: 2)
45->ICON45_1.ico (a: 2)
46->ICON46_1.ico (a: 2)
47->ICON47_1.ico (a: 2)
48->ICON48_1.ico (a: 2)
49->ICON49_1.ico (a: 2)
50->ICON50_1.ico (a: 2)
51->ICON51_1.ico (a: 2)
52->ICON52_1.ico (a: 2)
53->ICON53_1.ico (a: 2)
54->ICON54_1.ico (a: 2)
55->ICON55_1.ico (a: 2)
56->ICON56_1.ico (a: 2)
57->ICON57_1.ico (a: 2)
58->ICON58_1.ico (a: 2)
59->ICON59_1.ico (a: 2)
60->ICON60_1.ico (a: 2)
61->ICON61_1.ico (a: 2)
62->ICON62_1.ico (a: 2)
63->ICON63_1.ico (a: 2)
64->ICON64_1.ico (a: 2)
65->ICON65_1.ico (a: 2)
66->ICON66_1.ico (a: 2)
67->ICON67_1.ico (a: 2)
68->ICON68_1.ico (a: 2)
69->ICON69_1.ico (a: 2)
70->ICON70_1.ico (a: 2)
71->ICON71_1.ico (a: 2)
72->ICON72_1.ico (a: 2)
73->ICON73_1.ico (a: 2)
74->ICON74_1.ico (a: 2)
75->ICON75_1.ico (a: 2)
76->ICON76_1.ico (a: 2)
77->ICON77_1.ico (a: 2)
78->ICON78_1.ico (a: 2)
79->ICON79_1.ico (a: 2)
80->ICON80_1.ico (a: 2)
81->ICON81_1.ico (a: 2)
82->ICON82_1.ico (a: 2)
83->ICON83_1.ico (a: 2)
84->ICON84_1.ico (a: 2)
85->ICON85_1.ico (a: 2)
86->ICON86_1.ico (a: 2)
87->ICON87_1.ico (a: 2)
88->ICON88_1.ico (a: 2)
89->ICON89_1.ico (a: 2)
90->ICON90_1.ico (a: 2)
91->ICON91_1.ico (a: 2)
92->ICON92_1.ico (a: 2)
93->ICON93_1.ico (a: 2)
94->ICON94_1.ico (a: 2)
95->ICON95_1.ico (a: 2)
96->ICON96_1.ico (a: 2)
97->ICON97_1.ico (a: 2)
98->ICON98_1.ico (a: 2)
99->ICON99_1.ico (a: 2)
100->ICON100_1.ico (a: 2)
101->ICON101_1.ico (a: 2)
102->ICON102_1.ico (a: 2)
103->ICON103_1.ico (a: 2)
109->ICON109_1.ico (a: 2)
110->ICON110_1.ico (a: 2)
111->ICON111_1.ico (a: 2)
114->ICON114_1.ico (a: 2)
116->ICON116_1.ico (a: 2)
117->ICON117_1.ico (a: 2)
119->ICON119_1.ico (a: 0)
120->ICON120_1.ico (a: 2)
121->ICON121_1.ico (a: 0)
122->ICON122_1.ico (a: 2)
124->ICON124_1.ico (a: 2)
125->ICON125_1.ico (a: 2)
126->ICON126_1.ico (a: 2)
127->ICON127_1.ico (a: 2)
128->ICON128_1.ico (a: 2)
129->ICON129_1.ico (a: 2)
130->ICON130_1.ico (a: 2)
131->ICON131_1.ico (a: 2)
132->ICON132_1.ico (a: 2)
133->ICON133_1.ico (a: 2)
134->ICON134_1.ico (a: 2)
135->ICON135_1.ico (a: 2)
136->ICON136_1.ico (a: 2)
137->ICON137_1.ico (a: 2)
138->ICON138_1.ico (a: 2)
139->ICON139_1.ico (a: 2)
140->ICON140_1.ico (a: 2)
141->ICON141_1.ico (a: 2)
142->ICON142_1.ico (a: 2)
144->ICON144_1.ico (a: 2)
145->ICON145_1.ico (a: 2)
146->ICON146_1.ico (a: 2)
147->ICON147_1.ico (a: 2)
148->ICON148_1.ico (a: 2)
149->ICON149_1.ico (a: 2)
150->ICON150_1.ico (a: 2)
151->ICON151_1.ico (a: 2)
152->ICON152_1.ico (a: 2)
155->ICON155_1.ico (a: 2)
157->ICON157_1.ico (a: 2)
158->ICON158_1.ico (a: 2)
159->ICON159_1.ico (a: 2)
160->ICON160_1.ico (a: 2)
161->ICON161_1.ico (a: 2)
163->ICON163_1.ico (a: 2)
164->ICON164_1.ico (a: 2)
165->ICON165_1.ico (a: 2)
167->ICON167_1.ico (a: 2)
168->ICON168_1.ico (a: 2)
169->ICON169_1.ico (a: 2)
170->ICON170_1.ico (a: 2)
171->ICON171_1.ico (a: 2)
172->ICON172_1.ico (a: 2)
173->ICON173_1.ico (a: 2)
174->ICON174_1.ico (a: 2)
175->ICON175_1.ico (a: 2)
176->ICON176_1.ico (a: 2)
177->ICON177_1.ico (a: 2)
179->ICON179_1.ico (a: 2)
180->ICON180_1.ico (a: 2)
182->ICON182_1.ico (a: 2)
195->ICON195_1.ico (a: 2)
196->ICON196_1.ico (a: 2)
197->ICON197_1.ico (a: 2)
1010->ICON1010_1.ico (a: 2)
1021->ICON1021_1.ico (a: 2)
1022->ICON1022_1.ico (a: 2)
1023->ICON1023_1.ico (a: 2)
1024->ICON1024_1.ico (a: 2)
1026->ICON1026_1.ico (a: 2)
1027->ICON1027_1.ico (a: 2)
1029->ICON1029_1.ico (a: 2)
1030->ICON1030_1.ico (a: 2)
1031->ICON1031_1.ico (a: 2)
1032->ICON1032_1.ico (a: 2)
1033->ICON1033_1.ico (a: 2)
1034->ICON1034_1.ico (a: 2)
1035->ICON1035_1.ico (a: 2)
1036->ICON1036_1.ico (a: 2)
1037->ICON1037_1.ico (a: 2)

--- Summary ---
Icons kept: 51
Icons to remove: 170
================================================================================

Extracting resources from \pink folders\Windhawk Resources\imagesp1.dll...

200->ICON200_1.ico (a: 2)
201->ICON201_1.ico (a: 2)
202->ICON202_1.ico (a: 2)
203->ICON203_1.ico (a: 2)
204->ICON204_1.ico (a: 2)
205->ICON205_1.ico (a: 2)
206->ICON206_1.ico (a: 2)
207->ICON207_1.ico (a: 2)
208->ICON208_1.ico (a: 2)

--- Summary ---
Icons kept: 0
Icons to remove: 9
================================================================================

Extracting resources from \pink folders\Windhawk Resources\zipfldr.dll...

101->ICON101_1.ico (a: 2)
123->ICON123_1.ico (a: 2)

--- Summary ---
Icons kept: 0
Icons to remove: 2
================================================================================

Extracting resources from \Papirus Violet\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \Papirus Teal\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \Papirus Solarized\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \Papirus Red\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \Papirus Pink\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \Papirus Magenta\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \Papirus Grey\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \Papirus Dracula\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \Papirus Deep Orange\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \Papirus Brown\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \Papirus Blue Grey\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \Papirus Blue\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \Papirus Black\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \Paper\Windhawk Resources\imageres.dll...

SHIDI_SHIELD_INTERNAL->SHIDI_SHIELD_INTERNAL.ico (a: 2)
119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)
163->ICON163_1.ico (a: 2)
164->ICON164_1.ico (a: 2)
169->ICON169_1.ico (a: 2)
176->ICON176_1.ico (a: 2)

--- Summary ---
Icons kept: 212
Icons to remove: 7
================================================================================

Extracting resources from \OS X Minimalism Symbolic\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 119
Icons to remove: 2
================================================================================

Extracting resources from \OS X Minimalism\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 119
Icons to remove: 2
================================================================================

Extracting resources from \NUX\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)
191->ICON191_1.ico (a: 0)
192->ICON192_1.ico (a: 0)

--- Summary ---
Icons kept: 200
Icons to remove: 4
================================================================================

Extracting resources from \Nord Papirus\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \MINIUM2\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 219
Icons to remove: 2
================================================================================

Extracting resources from \mechanical\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \macpac lightmode\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \macpac darkmode\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \mac osx\Windhawk Resources\imageres.dll...

121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 221
Icons to remove: 1
================================================================================

Extracting resources from \lol\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \Linuxfx-11-lite\Windhawk Resources\imageres.dll...

163->ICON163_1.ico (a: 2)
5100->ICON5100_1.ico (a: 2)
5101->ICON5101_1.ico (a: 2)

--- Summary ---
Icons kept: 194
Icons to remove: 3
================================================================================

Extracting resources from \Linuxfx-11-AIO\Windhawk Resources\imageres.dll...

163->ICON163_1.ico (a: 2)
5100->ICON5100_1.ico (a: 2)
5101->ICON5101_1.ico (a: 2)

--- Summary ---
Icons kept: 194
Icons to remove: 3
================================================================================

Extracting resources from \Kripton Flatery\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \janguru orange\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \janguru grey\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \janguru green\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \janguru brown\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \janguru bluegrey\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \janguru blue\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \Humanity\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \Haiku BeOS\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \Gnome Wise\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \Gnome Wine\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \Gnome Noble\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \Gnome Human\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \Gnome Brave\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \Gnome\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 219
Icons to remove: 2
================================================================================

Extracting resources from \FLURRY\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \Fluent Keys Night\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)
191->ICON191_1.ico (a: 0)
192->ICON192_1.ico (a: 0)

--- Summary ---
Icons kept: 200
Icons to remove: 4
================================================================================

Extracting resources from \Fluent Keys Day\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)
191->ICON191_1.ico (a: 0)
192->ICON192_1.ico (a: 0)

--- Summary ---
Icons kept: 200
Icons to remove: 4
================================================================================

Extracting resources from \Fluent\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)
191->ICON191_1.ico (a: 0)
192->ICON192_1.ico (a: 0)

--- Summary ---
Icons kept: 212
Icons to remove: 4
================================================================================

Extracting resources from \Fetch\Windhawk Resources\imageres.dll...

SHIDI_SHIELD_INTERNAL->SHIDI_SHIELD_INTERNAL.ico (a: 2)
119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)
163->ICON163_1.ico (a: 2)
164->ICON164_1.ico (a: 2)
169->ICON169_1.ico (a: 2)
176->ICON176_1.ico (a: 2)
5100->ICON5100_1.ico (a: 2)
5101->ICON5101_1.ico (a: 2)

--- Summary ---
Icons kept: 211
Icons to remove: 9
================================================================================

Extracting resources from \FABA Symbolic\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \FABA\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \Eyecandy\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \everforest blank\Windhawk Resources\imageres.dll...

SHIDI_SHIELD_INTERNAL->SHIDI_SHIELD_INTERNAL.ico (a: 1)
25->ICON25_1.ico (a: 1)
27->ICON27_1.ico (a: 1)
67->ICON67_1.ico (a: 1)
78->ICON78_1.ico (a: 1)
86->ICON86_1.ico (a: 1)
87->ICON87_1.ico (a: 1)
88->ICON88_1.ico (a: 1)
109->ICON109_1.ico (a: 1)
116->ICON116_1.ico (a: 1)
117->ICON117_1.ico (a: 1)
120->ICON120_1.ico (a: 1)
130->ICON130_1.ico (a: 1)
144->ICON144_1.ico (a: 1)
148->ICON148_1.ico (a: 1)
150->ICON150_1.ico (a: 1)
151->ICON151_1.ico (a: 1)
152->ICON152_1.ico (a: 1)
165->ICON165_1.ico (a: 1)
167->ICON167_1.ico (a: 1)
195->ICON195_1.ico (a: 1)
196->ICON196_1.ico (a: 1)
197->ICON197_1.ico (a: 1)
1023->ICON1023_1.ico (a: 1)
1024->ICON1024_1.ico (a: 1)

--- Summary ---
Icons kept: 197
Icons to remove: 25
================================================================================

Extracting resources from \everforest blank\Windhawk Resources\shell32.dll...

51380->ICON51380_1.ico (a: 1)

--- Summary ---
Icons kept: 0
Icons to remove: 1
================================================================================

Extracting resources from \Elementary NEW\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \Elementary\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \Deepin Slate - for light themes\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 217
Icons to remove: 2
================================================================================

Extracting resources from \Deepin Slate - for dark themes\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 217
Icons to remove: 2
================================================================================

Extracting resources from \Deepin Green - for light themes\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 217
Icons to remove: 2
================================================================================

Extracting resources from \Deepin Green - for dark themes\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 217
Icons to remove: 2
================================================================================

Extracting resources from \Deepin Brown - for light themes\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 217
Icons to remove: 2
================================================================================

Extracting resources from \Deepin Brown - for dark themes\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 217
Icons to remove: 2
================================================================================

Extracting resources from \Deepin Blue - for light themes\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 217
Icons to remove: 2
================================================================================

Extracting resources from \Deepin Blue - for dark themes\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 217
Icons to remove: 2
================================================================================

Extracting resources from \Cheser\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \Cake OS Red\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \Cake OS Purple\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \Cake OS Orange\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \Cake OS Green\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \Cake OS Blue\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \bouquet\Windhawk Resources\imageres.dll...

Error cleaning RC file: unrecognized data stream contents when reading image file
================================================================================

Extracting resources from \blanked light mode\Windhawk Resources\imageres.dll...

2->ICON2_1.ico (a: 2)
3->ICON3_1.ico (a: 2)
4->ICON4_1.ico (a: 2)
5->ICON5_1.ico (a: 2)
6->ICON6_1.ico (a: 2)
14->ICON14_1.ico (a: 2)
15->ICON15_1.ico (a: 2)
18->ICON18_1.ico (a: 2)
19->ICON19_1.ico (a: 2)
20->ICON20_1.ico (a: 2)
21->ICON21_1.ico (a: 2)
22->ICON22_1.ico (a: 2)
23->ICON23_1.ico (a: 2)
24->ICON24_1.ico (a: 2)
25->ICON25_1.ico (a: 2)
27->ICON27_1.ico (a: 2)
28->ICON28_1.ico (a: 2)
29->ICON29_1.ico (a: 2)
30->ICON30_1.ico (a: 2)
31->ICON31_1.ico (a: 2)
32->ICON32_1.ico (a: 2)
33->ICON33_1.ico (a: 2)
34->ICON34_1.ico (a: 2)
35->ICON35_1.ico (a: 2)
36->ICON36_1.ico (a: 2)
37->ICON37_1.ico (a: 2)
38->ICON38_1.ico (a: 2)
39->ICON39_1.ico (a: 2)
40->ICON40_1.ico (a: 2)
41->ICON41_1.ico (a: 2)
54->ICON54_1.ico (a: 2)
55->ICON55_1.ico (a: 2)
56->ICON56_1.ico (a: 2)
58->ICON58_1.ico (a: 2)
59->ICON59_1.ico (a: 2)
61->ICON61_1.ico (a: 2)
62->ICON62_1.ico (a: 2)
63->ICON63_1.ico (a: 2)
64->ICON64_1.ico (a: 2)
67->ICON67_1.ico (a: 2)
68->ICON68_1.ico (a: 2)
69->ICON69_1.ico (a: 2)
70->ICON70_1.ico (a: 2)
71->ICON71_1.ico (a: 2)
72->ICON72_1.ico (a: 2)
75->ICON75_1.ico (a: 2)
77->ICON77_1.ico (a: 2)
78->ICON78_1.ico (a: 2)
79->ICON79_1.ico (a: 2)
81->ICON81_1.ico (a: 2)
82->ICON82_1.ico (a: 2)
83->ICON83_1.ico (a: 2)
84->ICON84_1.ico (a: 2)
85->ICON85_1.ico (a: 2)
86->ICON86_1.ico (a: 2)
87->ICON87_1.ico (a: 2)
88->ICON88_1.ico (a: 2)
89->ICON89_1.ico (a: 2)
90->ICON90_1.ico (a: 2)
99->ICON99_1.ico (a: 2)
100->ICON100_1.ico (a: 2)
101->ICON101_1.ico (a: 2)
102->ICON102_1.ico (a: 2)
108->ICON108_1.ico (a: 2)
109->ICON109_1.ico (a: 2)
110->ICON110_1.ico (a: 2)
112->ICON112_1.ico (a: 2)
113->ICON113_1.ico (a: 2)
115->ICON115_1.ico (a: 2)
117->ICON117_1.ico (a: 2)
120->ICON120_1.ico (a: 2)
122->ICON122_1.ico (a: 2)
123->ICON123_1.ico (a: 2)
129->ICON129_1.ico (a: 2)
131->ICON131_1.ico (a: 2)
132->ICON132_1.ico (a: 2)
133->ICON133_1.ico (a: 2)
134->ICON134_1.ico (a: 2)
135->ICON135_1.ico (a: 2)
136->ICON136_1.ico (a: 2)
137->ICON137_1.ico (a: 2)
138->ICON138_1.ico (a: 2)
139->ICON139_1.ico (a: 2)
140->ICON140_1.ico (a: 2)
141->ICON141_1.ico (a: 2)
142->ICON142_1.ico (a: 2)
143->ICON143_1.ico (a: 2)
144->ICON144_1.ico (a: 2)
146->ICON146_1.ico (a: 2)
151->ICON151_1.ico (a: 2)
152->ICON152_1.ico (a: 2)
155->ICON155_1.ico (a: 2)
161->ICON161_1.ico (a: 2)
162->ICON162_1.ico (a: 2)
163->ICON163_1.ico (a: 2)
164->ICON164_1.ico (a: 2)
165->ICON165_1.ico (a: 2)
166->ICON166_1.ico (a: 2)
172->ICON172_1.ico (a: 2)
173->ICON173_1.ico (a: 2)
174->ICON174_1.ico (a: 2)
178->ICON178_1.ico (a: 2)
181->ICON181_1.ico (a: 2)
183->ICON183_1.ico (a: 2)
184->ICON184_1.ico (a: 2)
185->ICON185_1.ico (a: 2)
186->ICON186_1.ico (a: 2)
189->ICON189_1.ico (a: 2)
195->ICON195_1.ico (a: 2)
196->ICON196_1.ico (a: 2)
197->ICON197_1.ico (a: 2)
198->ICON198_1.ico (a: 2)
1001->ICON1001_1.ico (a: 2)
1002->ICON1002_1.ico (a: 2)
1003->ICON1003_1.ico (a: 2)
1004->ICON1004_1.ico (a: 2)
1005->ICON1005_1.ico (a: 2)
1008->ICON1008_1.ico (a: 2)
1010->ICON1010_1.ico (a: 2)
1013->ICON1013_1.ico (a: 2)
1014->ICON1014_1.ico (a: 2)
1020->ICON1020_1.ico (a: 2)
1023->ICON1023_1.ico (a: 2)
1024->ICON1024_1.ico (a: 2)
1025->ICON1025_1.ico (a: 2)
1027->ICON1027_1.ico (a: 2)
1029->ICON1029_1.ico (a: 2)

--- Summary ---
Icons kept: 0
Icons to remove: 127
================================================================================

Extracting resources from \blanked light mode\Windhawk Resources\imagesp1.dll...

200->ICON200_1.ico (a: 2)
201->ICON201_1.ico (a: 2)
202->ICON202_1.ico (a: 2)
203->ICON203_1.ico (a: 2)
204->ICON204_1.ico (a: 2)
205->ICON205_1.ico (a: 2)
206->ICON206_1.ico (a: 2)
207->ICON207_1.ico (a: 2)
208->ICON208_1.ico (a: 2)

--- Summary ---
Icons kept: 0
Icons to remove: 9
================================================================================

Extracting resources from \blanked light mode\Windhawk Resources\shell32.dll...

51380->ICON51380_1.ico (a: 2)

--- Summary ---
Icons kept: 0
Icons to remove: 1
================================================================================

Extracting resources from \blanked light mode\Windhawk Resources\zipfldr.dll...

101->ICON101_1.ico (a: 2)
123->ICON123_1.ico (a: 2)

--- Summary ---
Icons kept: 0
Icons to remove: 2
================================================================================

Extracting resources from \blanked dark mode\Windhawk Resources\imageres.dll...

SHIDI_FLIP3D->SHIDI_FLIP3D.ico (a: 2)
SHIDI_SHIELD_INTERNAL->SHIDI_SHIELD_INTERNAL.ico (a: 2)
2->ICON2_1.ico (a: 2)
3->ICON3_1.ico (a: 2)
4->ICON4_1.ico (a: 2)
5->ICON5_1.ico (a: 2)
6->ICON6_1.ico (a: 2)
8->ICON8_1.ico (a: 2)
9->ICON9_1.ico (a: 2)
10->ICON10_1.ico (a: 2)
14->ICON14_1.ico (a: 2)
15->ICON15_1.ico (a: 2)
18->ICON18_1.ico (a: 2)
19->ICON19_1.ico (a: 2)
20->ICON20_1.ico (a: 2)
21->ICON21_1.ico (a: 2)
22->ICON22_1.ico (a: 2)
23->ICON23_1.ico (a: 2)
24->ICON24_1.ico (a: 2)
25->ICON25_1.ico (a: 2)
26->ICON26_1.ico (a: 2)
27->ICON27_1.ico (a: 2)
28->ICON28_1.ico (a: 2)
29->ICON29_1.ico (a: 2)
30->ICON30_1.ico (a: 2)
31->ICON31_1.ico (a: 2)
32->ICON32_1.ico (a: 2)
33->ICON33_1.ico (a: 2)
34->ICON34_1.ico (a: 2)
35->ICON35_1.ico (a: 2)
36->ICON36_1.ico (a: 2)
37->ICON37_1.ico (a: 2)
38->ICON38_1.ico (a: 2)
39->ICON39_1.ico (a: 2)
40->ICON40_1.ico (a: 2)
41->ICON41_1.ico (a: 2)
42->ICON42_1.ico (a: 2)
43->ICON43_1.ico (a: 2)
44->ICON44_1.ico (a: 2)
45->ICON45_1.ico (a: 2)
46->ICON46_1.ico (a: 2)
47->ICON47_1.ico (a: 2)
48->ICON48_1.ico (a: 2)
49->ICON49_1.ico (a: 2)
50->ICON50_1.ico (a: 2)
51->ICON51_1.ico (a: 2)
52->ICON52_1.ico (a: 2)
53->ICON53_1.ico (a: 2)
54->ICON54_1.ico (a: 2)
55->ICON55_1.ico (a: 2)
56->ICON56_1.ico (a: 2)
57->ICON57_1.ico (a: 2)
58->ICON58_1.ico (a: 2)
59->ICON59_1.ico (a: 2)
60->ICON60_1.ico (a: 2)
61->ICON61_1.ico (a: 2)
62->ICON62_1.ico (a: 2)
63->ICON63_1.ico (a: 2)
64->ICON64_1.ico (a: 2)
65->ICON65_1.ico (a: 2)
66->ICON66_1.ico (a: 2)
67->ICON67_1.ico (a: 2)
68->ICON68_1.ico (a: 2)
69->ICON69_1.ico (a: 2)
70->ICON70_1.ico (a: 2)
71->ICON71_1.ico (a: 2)
72->ICON72_1.ico (a: 2)
73->ICON73_1.ico (a: 2)
74->ICON74_1.ico (a: 2)
75->ICON75_1.ico (a: 2)
76->ICON76_1.ico (a: 2)
77->ICON77_1.ico (a: 2)
78->ICON78_1.ico (a: 2)
79->ICON79_1.ico (a: 2)
80->ICON80_1.ico (a: 2)
81->ICON81_1.ico (a: 2)
82->ICON82_1.ico (a: 2)
83->ICON83_1.ico (a: 2)
84->ICON84_1.ico (a: 2)
85->ICON85_1.ico (a: 2)
86->ICON86_1.ico (a: 2)
87->ICON87_1.ico (a: 2)
88->ICON88_1.ico (a: 2)
89->ICON89_1.ico (a: 2)
90->ICON90_1.ico (a: 2)
91->ICON91_1.ico (a: 2)
92->ICON92_1.ico (a: 2)
93->ICON93_1.ico (a: 2)
94->ICON94_1.ico (a: 2)
95->ICON95_1.ico (a: 2)
96->ICON96_1.ico (a: 2)
97->ICON97_1.ico (a: 2)
98->ICON98_1.ico (a: 2)
99->ICON99_1.ico (a: 2)
100->ICON100_1.ico (a: 2)
101->ICON101_1.ico (a: 2)
102->ICON102_1.ico (a: 2)
103->ICON103_1.ico (a: 2)
108->ICON108_1.ico (a: 2)
109->ICON109_1.ico (a: 2)
110->ICON110_1.ico (a: 2)
111->ICON111_1.ico (a: 2)
112->ICON112_1.ico (a: 2)
113->ICON113_1.ico (a: 2)
114->ICON114_1.ico (a: 2)
115->ICON115_1.ico (a: 2)
116->ICON116_1.ico (a: 2)
117->ICON117_1.ico (a: 2)
119->ICON119_1.ico (a: 0)
120->ICON120_1.ico (a: 2)
121->ICON121_1.ico (a: 0)
122->ICON122_1.ico (a: 2)
123->ICON123_1.ico (a: 2)
124->ICON124_1.ico (a: 2)
125->ICON125_1.ico (a: 2)
126->ICON126_1.ico (a: 2)
127->ICON127_1.ico (a: 2)
128->ICON128_1.ico (a: 2)
129->ICON129_1.ico (a: 2)
130->ICON130_1.ico (a: 2)
131->ICON131_1.ico (a: 2)
132->ICON132_1.ico (a: 2)
133->ICON133_1.ico (a: 2)
134->ICON134_1.ico (a: 2)
135->ICON135_1.ico (a: 2)
136->ICON136_1.ico (a: 2)
137->ICON137_1.ico (a: 2)
138->ICON138_1.ico (a: 2)
139->ICON139_1.ico (a: 2)
140->ICON140_1.ico (a: 2)
141->ICON141_1.ico (a: 2)
142->ICON142_1.ico (a: 2)
143->ICON143_1.ico (a: 2)
144->ICON144_1.ico (a: 2)
145->ICON145_1.ico (a: 2)
146->ICON146_1.ico (a: 2)
147->ICON147_1.ico (a: 2)
148->ICON148_1.ico (a: 2)
149->ICON149_1.ico (a: 2)
150->ICON150_1.ico (a: 2)
151->ICON151_1.ico (a: 2)
152->ICON152_1.ico (a: 2)
155->ICON155_1.ico (a: 2)
157->ICON157_1.ico (a: 2)
158->ICON158_1.ico (a: 2)
159->ICON159_1.ico (a: 2)
160->ICON160_1.ico (a: 2)
161->ICON161_1.ico (a: 2)
162->ICON162_1.ico (a: 2)
163->ICON163_1.ico (a: 2)
164->ICON164_1.ico (a: 2)
165->ICON165_1.ico (a: 2)
166->ICON166_1.ico (a: 2)
167->ICON167_1.ico (a: 2)
168->ICON168_1.ico (a: 2)
169->ICON169_1.ico (a: 2)
170->ICON170_1.ico (a: 2)
171->ICON171_1.ico (a: 2)
172->ICON172_1.ico (a: 2)
173->ICON173_1.ico (a: 2)
174->ICON174_1.ico (a: 2)
175->ICON175_1.ico (a: 2)
176->ICON176_1.ico (a: 2)
177->ICON177_1.ico (a: 2)
178->ICON178_1.ico (a: 2)
179->ICON179_1.ico (a: 2)
180->ICON180_1.ico (a: 2)
181->ICON181_1.ico (a: 2)
182->ICON182_1.ico (a: 2)
183->ICON183_1.ico (a: 2)
184->ICON184_1.ico (a: 2)
185->ICON185_1.ico (a: 2)
186->ICON186_1.ico (a: 2)
189->ICON189_1.ico (a: 2)
190->ICON190_1.ico (a: 2)
195->ICON195_1.ico (a: 2)
196->ICON196_1.ico (a: 2)
197->ICON197_1.ico (a: 2)
198->ICON198_1.ico (a: 2)
1001->ICON1001_1.ico (a: 2)
1002->ICON1002_1.ico (a: 2)
1003->ICON1003_1.ico (a: 2)
1004->ICON1004_1.ico (a: 2)
1005->ICON1005_1.ico (a: 2)
1008->ICON1008_1.ico (a: 2)
1010->ICON1010_1.ico (a: 2)
1013->ICON1013_1.ico (a: 2)
1014->ICON1014_1.ico (a: 2)
1020->ICON1020_1.ico (a: 2)
1021->ICON1021_1.ico (a: 2)
1022->ICON1022_1.ico (a: 2)
1023->ICON1023_1.ico (a: 2)
1024->ICON1024_1.ico (a: 2)
1025->ICON1025_1.ico (a: 2)
1026->ICON1026_1.ico (a: 2)
1027->ICON1027_1.ico (a: 2)
1029->ICON1029_1.ico (a: 2)
1030->ICON1030_1.ico (a: 2)
1031->ICON1031_1.ico (a: 2)
1032->ICON1032_1.ico (a: 2)
1033->ICON1033_1.ico (a: 2)
1034->ICON1034_1.ico (a: 2)
1035->ICON1035_1.ico (a: 2)
1036->ICON1036_1.ico (a: 2)
1037->ICON1037_1.ico (a: 2)
1040->ICON1040_1.ico (a: 2)
1043->ICON1043_1.ico (a: 2)
5100->ICON5100_1.ico (a: 2)
5101->ICON5101_1.ico (a: 2)

--- Summary ---
Icons kept: 12
Icons to remove: 209
================================================================================

Extracting resources from \blanked dark mode\Windhawk Resources\imagesp1.dll...

200->ICON200_1.ico (a: 2)
201->ICON201_1.ico (a: 2)
202->ICON202_1.ico (a: 2)
203->ICON203_1.ico (a: 2)
204->ICON204_1.ico (a: 2)
205->ICON205_1.ico (a: 2)
206->ICON206_1.ico (a: 2)
207->ICON207_1.ico (a: 2)
208->ICON208_1.ico (a: 2)

--- Summary ---
Icons kept: 0
Icons to remove: 9
================================================================================

Extracting resources from \blanked dark mode\Windhawk Resources\shell32.dll...

51380->ICON51380_1.ico (a: 2)

--- Summary ---
Icons kept: 0
Icons to remove: 1
================================================================================

Extracting resources from \blanked dark mode\Windhawk Resources\zipfldr.dll...

101->ICON101_1.ico (a: 2)
123->ICON123_1.ico (a: 2)

--- Summary ---
Icons kept: 0
Icons to remove: 2
================================================================================

Extracting resources from \Big Sur LightMode\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 219
Icons to remove: 2
================================================================================

Extracting resources from \Big Sur DarkMode\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 219
Icons to remove: 2
================================================================================

Extracting resources from \arc-neutral grey\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 217
Icons to remove: 2
================================================================================

Extracting resources from \arc-neutral brown\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 217
Icons to remove: 2
================================================================================

Extracting resources from \ARC Symbolic\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Extracting resources from \ARC\Windhawk Resources\imageres.dll...

119->ICON119_1.ico (a: 0)
121->ICON121_1.ico (a: 0)

--- Summary ---
Icons kept: 220
Icons to remove: 2
================================================================================

Summary:
  Total DLLs processed: 662
  Successful: 661
  Failed: 1

Notes:

  • The following files left with no icons at all, and were removed:
    blanked dark mode\Windhawk Resources\imagesp1.dll
    blanked dark mode\Windhawk Resources\shell32.dll
    blanked dark mode\Windhawk Resources\zipfldr.dll
    blanked light mode\Windhawk Resources\imageres.dll
    blanked light mode\Windhawk Resources\imagesp1.dll
    blanked light mode\Windhawk Resources\shell32.dll
    blanked light mode\Windhawk Resources\zipfldr.dll
    everforest blank\Windhawk Resources\shell32.dll
    pink folders\Windhawk Resources\imagesp1.dll
    pink folders\Windhawk Resources\zipfldr.dll
    Tokyo Night blank\Windhawk Resources\shell32.dll
    
  • The "blanked light mode" theme was left with no redirections. It also had an incorrect preview image which was removed. I think both "blanked light mode" and "blanked dark mode" themes should just be removed.
    • Edit: According to the screenshot, I guess it's by design for these themes. I reverted them. Not sure why there are separate light and dark variants, though.
  • The "bouquet" theme has some corrupted icons, and it was skipped.

FYI @Undisputed00x

@m417z m417z merged commit 8f544c1 into gh-pages Oct 4, 2025
1 check passed
@m417z m417z deleted the remove-transparent-icons branch October 4, 2025 15:27
m417z added a commit to m417z/resource-redirect-icon-themes-fork that referenced this pull request Oct 4, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant