diff --git a/profile-img.bat b/profile-img.bat new file mode 100644 index 0000000..810bf49 --- /dev/null +++ b/profile-img.bat @@ -0,0 +1,141 @@ +@echo off + +rem Created for Windows 10 AME, tested on version 20H2 +rem Author: Logan Darklock (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 \ No newline at end of file