You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

140 lines
7.2 KiB

  1. @echo off
  2. rem Created for Windows 10 AME, tested on version 20H2
  3. rem Author: Logan Darklock <logandarklock@gmail.com> (no spam please)
  4. rem Co-author: lucid
  5. cls
  6. echo :: Windows 10 AME User Icon Changer
  7. echo.
  8. echo Working...
  9. echo.
  10. setlocal
  11. set SCRIPT=%0
  12. set IMAGE=%1
  13. set SID=%2
  14. if "%IMAGE%" == "" (
  15. cls
  16. echo :: Windows 10 AME User Icon Changer
  17. echo.
  18. echo To change the user icon, drag-and-drop
  19. echo an image file onto the script icon.
  20. goto pause
  21. )
  22. rem Verify image extension, per lucid's request
  23. set NAME=%IMAGE:"=%
  24. rem Convert to lowercase
  25. set NAME=%NAME:A=a%
  26. set NAME=%NAME:B=b%
  27. set NAME=%NAME:C=c%
  28. set NAME=%NAME:D=d%
  29. set NAME=%NAME:E=e%
  30. set NAME=%NAME:F=f%
  31. set NAME=%NAME:G=g%
  32. set NAME=%NAME:H=h%
  33. set NAME=%NAME:I=i%
  34. set NAME=%NAME:J=j%
  35. set NAME=%NAME:K=k%
  36. set NAME=%NAME:L=l%
  37. set NAME=%NAME:M=m%
  38. set NAME=%NAME:N=n%
  39. set NAME=%NAME:O=o%
  40. set NAME=%NAME:P=p%
  41. set NAME=%NAME:Q=q%
  42. set NAME=%NAME:R=r%
  43. set NAME=%NAME:S=s%
  44. set NAME=%NAME:T=t%
  45. set NAME=%NAME:U=u%
  46. set NAME=%NAME:V=v%
  47. set NAME=%NAME:W=w%
  48. set NAME=%NAME:X=x%
  49. set NAME=%NAME:Y=y%
  50. set NAME=%NAME:Z=z%
  51. if "%NAME:~-4%" == ".jpg" (goto validextension)
  52. if "%NAME:~-5%" == ".jpeg" (goto validextension)
  53. if "%NAME:~-4%" == ".png" (goto validextension)
  54. if "%NAME:~-4%" == ".gif" (goto validextension)
  55. if "%NAME:~-4%" == ".bmp" (goto validextension)
  56. cls
  57. echo :: Windows 10 AME User Icon Changer
  58. echo.
  59. echo Invalid image format!
  60. echo.
  61. echo Supported image formats: .jpg, .jpeg, .png, .gif, .bmp
  62. goto pause
  63. :validextension
  64. if "%SID%" == "" (
  65. rem When this script is elevated to admin permissions we keep track of the
  66. rem SID of the user whose icon is being changed. This is passed as a third
  67. rem argument so we can target registry changes and resized pictures to the
  68. rem correct folder.
  69. for /f "skip=1" %%w in ('"wmic path win32_useraccount where name='%USERNAME%' get sid"') do (
  70. set SID=%%w
  71. goto sidend
  72. )
  73. )
  74. :sidend
  75. timeout /t 1 /nobreak > NUL
  76. openfiles > NUL 2>&1
  77. if not %errorlevel% == 0 (
  78. cls
  79. echo :: Windows 10 AME User Icon Changer
  80. echo.
  81. echo Elevating to administrator...
  82. powershell "Start-Process """%SCRIPT:"=`"""%""" -ArgumentList """%IMAGE:"=`"""% %SID:"=`"""%""" -Verb RunAs"
  83. goto end
  84. )
  85. rem On recent Windows 10 versions, resolutions called for are:
  86. rem 32x32, 40x40, 48x48, 64x64, 96x96, 192x192, 208x208, 240x240, 424x424,
  87. rem 448x448, 1080x1080
  88. rem This is ridiculous and I don't know why it can't be resized dynamically by
  89. rem Windows, but sure
  90. set FOLDER=%PUBLIC%\AccountPictures\%SID%
  91. md "%FOLDER%" >nul 2>&1
  92. takeown /r /d Y /f "%FOLDER%" >nul
  93. icacls "%FOLDER%" /reset /t >nul
  94. del /q /f "%FOLDER%\*" > nul
  95. rem Set word wrap to 80 columns and this will become readable. I'm so sorry...
  96. 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"""); "
  97. set KEY=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AccountPicture\Users\%SID%
  98. reg add "%KEY%" /v Image32 /t REG_SZ /d "%FOLDER%\32x32.png" /f >nul
  99. reg add "%KEY%" /v Image40 /t REG_SZ /d "%FOLDER%\40x40.png" /f >nul
  100. reg add "%KEY%" /v Image48 /t REG_SZ /d "%FOLDER%\48x48.png" /f >nul
  101. reg add "%KEY%" /v Image64 /t REG_SZ /d "%FOLDER%\64x64.png" /f >nul
  102. reg add "%KEY%" /v Image96 /t REG_SZ /d "%FOLDER%\96x96.png" /f >nul
  103. reg add "%KEY%" /v Image192 /t REG_SZ /d "%FOLDER%\192x192.png" /f >nul
  104. reg add "%KEY%" /v Image208 /t REG_SZ /d "%FOLDER%\208x208.png" /f >nul
  105. reg add "%KEY%" /v Image240 /t REG_SZ /d "%FOLDER%\240x240.png" /f >nul
  106. reg add "%KEY%" /v Image424 /t REG_SZ /d "%FOLDER%\424x424.png" /f >nul
  107. reg add "%KEY%" /v Image448 /t REG_SZ /d "%FOLDER%\448x448.png" /f >nul
  108. reg add "%KEY%" /v Image1080 /t REG_SZ /d "%FOLDER%\1080x1080.png" /f >nul
  109. gpupdate /force >nul
  110. cls
  111. echo :: Windows 10 AME User Icon Changer
  112. echo.
  113. echo User icon successfully changed! You may have to reboot
  114. echo for it to fully take effect.
  115. :pause
  116. echo.
  117. pause
  118. :end