1.1.0版本
This commit is contained in:
93
assets/icon_check.bat
Normal file
93
assets/icon_check.bat
Normal file
@@ -0,0 +1,93 @@
|
||||
@echo off
|
||||
setlocal ENABLEDELAYEDEXPANSION
|
||||
|
||||
:: ------------------------------------------------------------
|
||||
:: Select ico file via GUI
|
||||
:: ------------------------------------------------------------
|
||||
for /f "delims=" %%A in ('powershell -command ^
|
||||
"Add-Type -AssemblyName System.Windows.Forms | Out-Null; $f=New-Object Windows.Forms.OpenFileDialog; $f.Filter='Icon (*.ico)|*.ico'; if($f.ShowDialog() -eq 'OK'){Write-Output $f.FileName}"') do (
|
||||
set ICO=%%A
|
||||
)
|
||||
|
||||
if "%ICO%"=="" (
|
||||
echo No file selected.
|
||||
pause
|
||||
exit /b
|
||||
)
|
||||
|
||||
echo Checking icon: %ICO%
|
||||
echo -----------------------------------------
|
||||
|
||||
:: ------------------------------------------------------------
|
||||
:: Extract bytes via PowerShell (safe for PNG-ICON)
|
||||
:: ------------------------------------------------------------
|
||||
for /f "tokens=* delims=" %%B in ('powershell -command ^
|
||||
"[System.IO.File]::ReadAllBytes('%ICO%') -join ' '"') do (
|
||||
set RAW=%%B
|
||||
)
|
||||
|
||||
:: Convert byte list into array
|
||||
set i=0
|
||||
for %%b in (%RAW%) do (
|
||||
set BYTE[!i!]=%%b
|
||||
set /a i+=1
|
||||
)
|
||||
set /a LEN=i
|
||||
|
||||
:: ICONDIR.Count = bytes 4-5
|
||||
set /a COUNT=BYTE[4] + BYTE[5]*256
|
||||
echo Total frames: %COUNT%
|
||||
echo.
|
||||
|
||||
if %COUNT% LEQ 0 (
|
||||
echo ERROR: Invalid icon or no frames.
|
||||
pause
|
||||
exit /b
|
||||
)
|
||||
|
||||
set HAS256=0
|
||||
set FIRST256=0
|
||||
|
||||
echo Frame list:
|
||||
echo -----------------------------------------
|
||||
|
||||
:: Each ICONDIRENTRY = 16 bytes starting at offset 6
|
||||
for /l %%I in (0,1,%COUNT%-1) do (
|
||||
set /a OFFSET=6 + 16 * %%I
|
||||
|
||||
set W=!BYTE[%OFFSET%]!
|
||||
set H=!BYTE[%OFFSET%+1]!
|
||||
|
||||
if "!W!"=="0" set W=256
|
||||
if "!H!"=="0" set H=256
|
||||
|
||||
echo Frame %%I = !W! x !H!
|
||||
|
||||
if "!W!"=="256" if "!H!"=="256" (
|
||||
set HAS256=1
|
||||
if %%I==0 set FIRST256=1
|
||||
)
|
||||
)
|
||||
|
||||
echo.
|
||||
echo -----------------------------------------
|
||||
|
||||
if %HAS256%==0 (
|
||||
echo ERROR: No 256x256 frame found.
|
||||
echo This is why NSIS and Windows show a small icon.
|
||||
pause
|
||||
exit /b
|
||||
)
|
||||
|
||||
if %FIRST256%==0 (
|
||||
echo WARNING: 256x256 exists but is NOT frame 0.
|
||||
echo This causes small icons in NSIS installers.
|
||||
echo You should reorder frames so 256x256 is the first frame.
|
||||
pause
|
||||
exit /b
|
||||
)
|
||||
|
||||
echo SUCCESS: 256x256 frame exists AND is the first frame.
|
||||
echo Icon is well-structured.
|
||||
pause
|
||||
exit /b
|
||||
Reference in New Issue
Block a user