|
@echo off
|
|
|
|
rem Created for Windows 10 AME, tested on version 20H2
|
|
rem Author: Logan Darklock <logandarklock@gmail.com> (no spam please)
|
|
rem Co-author: lucid
|
|
|
|
cls
|
|
echo :: Windows 10 AME User Icon Changer
|
|
echo.
|
|
echo Working...
|
|
echo.
|
|
|
|
setlocal
|
|
set SCRIPT=%0
|
|
set IMAGE=%1
|
|
set SID=%2
|
|
|
|
if "%IMAGE%" == "" (
|
|
cls
|
|
echo :: Windows 10 AME User Icon Changer
|
|
echo.
|
|
echo To change the user icon, drag-and-drop
|
|
echo an image file onto the script icon.
|
|
goto pause
|
|
)
|
|
|
|
rem Verify image extension, per lucid's request
|
|
set NAME=%IMAGE:"=%
|
|
|
|
rem Convert to lowercase
|
|
set NAME=%NAME:A=a%
|
|
set NAME=%NAME:B=b%
|
|
set NAME=%NAME:C=c%
|
|
set NAME=%NAME:D=d%
|
|
set NAME=%NAME:E=e%
|
|
set NAME=%NAME:F=f%
|
|
set NAME=%NAME:G=g%
|
|
set NAME=%NAME:H=h%
|
|
set NAME=%NAME:I=i%
|
|
set NAME=%NAME:J=j%
|
|
set NAME=%NAME:K=k%
|
|
set NAME=%NAME:L=l%
|
|
set NAME=%NAME:M=m%
|
|
set NAME=%NAME:N=n%
|
|
set NAME=%NAME:O=o%
|
|
set NAME=%NAME:P=p%
|
|
set NAME=%NAME:Q=q%
|
|
set NAME=%NAME:R=r%
|
|
set NAME=%NAME:S=s%
|
|
set NAME=%NAME:T=t%
|
|
set NAME=%NAME:U=u%
|
|
set NAME=%NAME:V=v%
|
|
set NAME=%NAME:W=w%
|
|
set NAME=%NAME:X=x%
|
|
set NAME=%NAME:Y=y%
|
|
set NAME=%NAME:Z=z%
|
|
|
|
if "%NAME:~-4%" == ".jpg" (goto validextension)
|
|
if "%NAME:~-5%" == ".jpeg" (goto validextension)
|
|
if "%NAME:~-4%" == ".png" (goto validextension)
|
|
if "%NAME:~-4%" == ".gif" (goto validextension)
|
|
if "%NAME:~-4%" == ".bmp" (goto validextension)
|
|
|
|
cls
|
|
echo :: Windows 10 AME User Icon Changer
|
|
echo.
|
|
echo Invalid image format!
|
|
echo.
|
|
echo Supported image formats: .jpg, .jpeg, .png, .gif, .bmp
|
|
goto pause
|
|
|
|
:validextension
|
|
|
|
if "%SID%" == "" (
|
|
rem When this script is elevated to admin permissions we keep track of the
|
|
rem SID of the user whose icon is being changed. This is passed as a third
|
|
rem argument so we can target registry changes and resized pictures to the
|
|
rem correct folder.
|
|
|
|
for /f "skip=1" %%w in ('"wmic path win32_useraccount where name='%USERNAME%' get sid"') do (
|
|
set SID=%%w
|
|
goto sidend
|
|
)
|
|
)
|
|
|
|
:sidend
|
|
|
|
timeout /t 1 /nobreak > NUL
|
|
openfiles > NUL 2>&1
|
|
|
|
if not %errorlevel% == 0 (
|
|
cls
|
|
echo :: Windows 10 AME User Icon Changer
|
|
echo.
|
|
echo Elevating to administrator...
|
|
powershell "Start-Process """%SCRIPT:"=`"""%""" -ArgumentList """%IMAGE:"=`"""% %SID:"=`"""%""" -Verb RunAs"
|
|
goto end
|
|
)
|
|
|
|
rem On recent Windows 10 versions, resolutions called for are:
|
|
rem 32x32, 40x40, 48x48, 64x64, 96x96, 192x192, 208x208, 240x240, 424x424,
|
|
rem 448x448, 1080x1080
|
|
rem This is ridiculous and I don't know why it can't be resized dynamically by
|
|
rem Windows, but sure
|
|
set FOLDER=%PUBLIC%\AccountPictures\%SID%
|
|
|
|
md "%FOLDER%" >nul 2>&1
|
|
takeown /r /d Y /f "%FOLDER%" >nul
|
|
icacls "%FOLDER%" /reset /t >nul
|
|
del /q /f "%FOLDER%\*" > nul
|
|
|
|
rem Set word wrap to 80 columns and this will become readable. I'm so sorry...
|
|
powershell "Add-Type -AssemblyName System.Drawing; $img = [System.Drawing.Image]::FromFile((Get-Item """%IMAGE:"=`"""%""")); $a = New-Object System.Drawing.Bitmap(32, 32); $graph = [System.Drawing.Graphics]::FromImage($a); $graph.DrawImage($img, 0, 0, 32, 32); $a.Save("""%FOLDER:"=`"""%\32x32.png"""); $b = New-Object System.Drawing.Bitmap(40, 40); $graph = [System.Drawing.Graphics]::FromImage($b); $graph.DrawImage($img, 0, 0, 40, 40); $b.Save("""%FOLDER:"=`"""%\40x40.png"""); $c = New-Object System.Drawing.Bitmap(48, 48); $graph = [System.Drawing.Graphics]::FromImage($c); $graph.DrawImage($img, 0, 0, 48, 48); $c.Save("""%FOLDER:"=`"""%\48x48.png"""); $d = New-Object System.Drawing.Bitmap(64, 64); $graph = [System.Drawing.Graphics]::FromImage($d); $graph.DrawImage($img, 0, 0, 64, 64); $d.Save("""%FOLDER:"=`"""%\64x64.png"""); $e = New-Object System.Drawing.Bitmap(96, 96); $graph = [System.Drawing.Graphics]::FromImage($e); $graph.DrawImage($img, 0, 0, 96, 96); $e.Save("""%FOLDER:"=`"""%\96x96.png"""); $f = New-Object System.Drawing.Bitmap(192, 192); $graph = [System.Drawing.Graphics]::FromImage($f); $graph.DrawImage($img, 0, 0, 192, 192); $f.Save("""%FOLDER:"=`"""%\192x192.png"""); $g = New-Object System.Drawing.Bitmap(208, 208); $graph = [System.Drawing.Graphics]::FromImage($g); $graph.DrawImage($img, 0, 0, 208, 208); $g.Save("""%FOLDER:"=`"""%\208x208.png"""); $h = New-Object System.Drawing.Bitmap(240, 240); $graph = [System.Drawing.Graphics]::FromImage($h); $graph.DrawImage($img, 0, 0, 240, 240); $h.Save("""%FOLDER:"=`"""%\240x240.png"""); $i = New-Object System.Drawing.Bitmap(424, 424); $graph = [System.Drawing.Graphics]::FromImage($i); $graph.DrawImage($img, 0, 0, 424, 424); $i.Save("""%FOLDER:"=`"""%\424x424.png"""); $j = New-Object System.Drawing.Bitmap(448, 448); $graph = [System.Drawing.Graphics]::FromImage($j); $graph.DrawImage($img, 0, 0, 448, 448); $j.Save("""%FOLDER:"=`"""%\448x448.png"""); $k = New-Object System.Drawing.Bitmap(1080, 1080); $graph = [System.Drawing.Graphics]::FromImage($k); $graph.DrawImage($img, 0, 0, 1080, 1080); $k.Save("""%FOLDER:"=`"""%\1080x1080.png"""); "
|
|
|
|
set KEY=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AccountPicture\Users\%SID%
|
|
|
|
reg add "%KEY%" /v Image32 /t REG_SZ /d "%FOLDER%\32x32.png" /f >nul
|
|
reg add "%KEY%" /v Image40 /t REG_SZ /d "%FOLDER%\40x40.png" /f >nul
|
|
reg add "%KEY%" /v Image48 /t REG_SZ /d "%FOLDER%\48x48.png" /f >nul
|
|
reg add "%KEY%" /v Image64 /t REG_SZ /d "%FOLDER%\64x64.png" /f >nul
|
|
reg add "%KEY%" /v Image96 /t REG_SZ /d "%FOLDER%\96x96.png" /f >nul
|
|
reg add "%KEY%" /v Image192 /t REG_SZ /d "%FOLDER%\192x192.png" /f >nul
|
|
reg add "%KEY%" /v Image208 /t REG_SZ /d "%FOLDER%\208x208.png" /f >nul
|
|
reg add "%KEY%" /v Image240 /t REG_SZ /d "%FOLDER%\240x240.png" /f >nul
|
|
reg add "%KEY%" /v Image424 /t REG_SZ /d "%FOLDER%\424x424.png" /f >nul
|
|
reg add "%KEY%" /v Image448 /t REG_SZ /d "%FOLDER%\448x448.png" /f >nul
|
|
reg add "%KEY%" /v Image1080 /t REG_SZ /d "%FOLDER%\1080x1080.png" /f >nul
|
|
|
|
gpupdate /force >nul
|
|
|
|
cls
|
|
echo :: Windows 10 AME User Icon Changer
|
|
echo.
|
|
echo User icon successfully changed! You may have to reboot
|
|
echo for it to fully take effect.
|
|
|
|
:pause
|
|
echo.
|
|
pause
|
|
|
|
:end
|