mirror of
https://github.com/jazir555/GamesDows.git
synced 2025-10-19 00:59:33 +02:00
Compare commits
24 Commits
v9
...
Welcome-Sc
Author | SHA1 | Date | |
---|---|---|---|
![]() |
c1b57ca1ca | ||
![]() |
933adbd879 | ||
![]() |
d1e04f0cc3 | ||
![]() |
99cdee8922 | ||
![]() |
86af54176e | ||
![]() |
2611bb861f | ||
![]() |
0006eefd9f | ||
![]() |
7426d4a5e9 | ||
![]() |
3b6b073b89 | ||
![]() |
e69d1db9b1 | ||
![]() |
a8cee33437 | ||
![]() |
bf08fb5546 | ||
![]() |
5fe58bc56a | ||
![]() |
3689b68215 | ||
![]() |
87c64e1313 | ||
![]() |
0dfeccd96d | ||
![]() |
88d9e2972a | ||
![]() |
cb9218a3d0 | ||
![]() |
24a9f0e798 | ||
![]() |
f98ba713bd | ||
![]() |
89f4b71825 | ||
![]() |
785a97b697 | ||
![]() |
9f62c88fc1 | ||
![]() |
56c5b6a91e |
@@ -1,134 +0,0 @@
|
||||
@echo off
|
||||
SETLOCAL EnableExtensions EnableDelayedExpansion
|
||||
|
||||
:: Paths for Steam
|
||||
SET "STEAM_FOLDER=C:\Program Files (x86)\Steam"
|
||||
SET "STEAM_SCRIPT_NAME=DelayedExplorerStart.bat"
|
||||
SET "STEAM_SCRIPT_PATH=%STEAM_FOLDER%\%STEAM_SCRIPT_NAME%"
|
||||
SET "STEAM_VBS_NAME=RunBatchSilently.vbs"
|
||||
SET "STEAM_VBS_PATH=%STEAM_FOLDER%\%STEAM_VBS_NAME%"
|
||||
SET "STEAM_XML_NAME=DelayedExplorerStartTask.xml"
|
||||
SET "STEAM_XML_PATH=%STEAM_FOLDER%\%STEAM_XML_NAME%"
|
||||
|
||||
:: Paths for Playnite
|
||||
SET "PLAYNITE_FOLDER=%LOCALAPPDATA%\Playnite"
|
||||
SET "PLAYNITE_SCRIPT_NAME=DelayedExplorerStart.bat"
|
||||
SET "PLAYNITE_SCRIPT_PATH=%PLAYNITE_FOLDER%\%PLAYNITE_SCRIPT_NAME%"
|
||||
SET "PLAYNITE_VBS_NAME=RunBatchSilently.vbs"
|
||||
SET "PLAYNITE_VBS_PATH=%PLAYNITE_FOLDER%\%PLAYNITE_VBS_NAME%"
|
||||
SET "PLAYNITE_XML_NAME=DelayedExplorerStartTask.xml"
|
||||
SET "PLAYNITE_XML_PATH=%PLAYNITE_FOLDER%\%PLAYNITE_XML_NAME%"
|
||||
|
||||
echo ================================
|
||||
echo DISABLING GAMESDOWS / REMOVING CUSTOM SHELL
|
||||
echo ================================
|
||||
|
||||
:: 1) Reset the default shell to Explorer
|
||||
echo [1/5] Resetting default shell to Explorer...
|
||||
REG ADD "HKCU\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" ^
|
||||
/v "Shell" /t REG_SZ /d "C:\Windows\explorer.exe" /f
|
||||
if ERRORLEVEL 1 (
|
||||
echo [ERROR] Failed to reset the default shell.
|
||||
goto end
|
||||
) else (
|
||||
echo [SUCCESS] Default shell reset to Explorer.
|
||||
)
|
||||
|
||||
:: 2) Delete any existing DelayedExplorerStart.bat in Steam folder
|
||||
echo [2/5] Deleting DelayedExplorerStart.bat from Steam folder...
|
||||
IF EXIST "%STEAM_SCRIPT_PATH%" (
|
||||
DEL /F /Q "%STEAM_SCRIPT_PATH%"
|
||||
if ERRORLEVEL 1 (
|
||||
echo [WARNING] Could not delete %STEAM_SCRIPT_NAME%.
|
||||
) else (
|
||||
echo [SUCCESS] %STEAM_SCRIPT_NAME% deleted.
|
||||
)
|
||||
) else (
|
||||
echo [INFO] %STEAM_SCRIPT_NAME% does not exist in Steam folder.
|
||||
)
|
||||
|
||||
:: 2b) Delete any existing DelayedExplorerStart.bat in Playnite folder
|
||||
echo [2b/5] Deleting DelayedExplorerStart.bat from Playnite folder...
|
||||
IF EXIST "%PLAYNITE_SCRIPT_PATH%" (
|
||||
DEL /F /Q "%PLAYNITE_SCRIPT_PATH%"
|
||||
if ERRORLEVEL 1 (
|
||||
echo [WARNING] Could not delete %PLAYNITE_SCRIPT_NAME%.
|
||||
) else (
|
||||
echo [SUCCESS] %PLAYNITE_SCRIPT_NAME% deleted.
|
||||
)
|
||||
) else (
|
||||
echo [INFO] %PLAYNITE_SCRIPT_NAME% does not exist in Playnite folder.
|
||||
)
|
||||
|
||||
:: 3) Delete any existing RunBatchSilently.vbs in Steam folder
|
||||
echo [3/5] Deleting RunBatchSilently.vbs from Steam folder...
|
||||
IF EXIST "%STEAM_VBS_PATH%" (
|
||||
DEL /F /Q "%STEAM_VBS_PATH%"
|
||||
if ERRORLEVEL 1 (
|
||||
echo [WARNING] Could not delete %STEAM_VBS_NAME%.
|
||||
) else (
|
||||
echo [SUCCESS] %STEAM_VBS_NAME% deleted.
|
||||
)
|
||||
) else (
|
||||
echo [INFO] %STEAM_VBS_NAME% does not exist in Steam folder.
|
||||
)
|
||||
|
||||
:: 3b) Delete any existing RunBatchSilently.vbs in Playnite folder
|
||||
echo [3b/5] Deleting RunBatchSilently.vbs from Playnite folder...
|
||||
IF EXIST "%PLAYNITE_VBS_PATH%" (
|
||||
DEL /F /Q "%PLAYNITE_VBS_PATH%"
|
||||
if ERRORLEVEL 1 (
|
||||
echo [WARNING] Could not delete %PLAYNITE_VBS_NAME%.
|
||||
) else (
|
||||
echo [SUCCESS] %PLAYNITE_VBS_NAME% deleted.
|
||||
)
|
||||
) else (
|
||||
echo [INFO] %PLAYNITE_VBS_NAME% does not exist in Playnite folder.
|
||||
)
|
||||
|
||||
:: 4) Delete any existing DelayedExplorerStartTask.xml in Steam folder
|
||||
echo [4/5] Deleting DelayedExplorerStartTask.xml from Steam folder...
|
||||
IF EXIST "%STEAM_XML_PATH%" (
|
||||
DEL /F /Q "%STEAM_XML_PATH%"
|
||||
if ERRORLEVEL 1 (
|
||||
echo [WARNING] Could not delete %STEAM_XML_NAME%.
|
||||
) else (
|
||||
echo [SUCCESS] %STEAM_XML_NAME% deleted.
|
||||
)
|
||||
) else (
|
||||
echo [INFO] %STEAM_XML_NAME% does not exist in Steam folder.
|
||||
)
|
||||
|
||||
:: 4b) Delete any existing DelayedExplorerStartTask.xml in Playnite folder
|
||||
echo [4b/5] Deleting DelayedExplorerStartTask.xml from Playnite folder...
|
||||
IF EXIST "%PLAYNITE_XML_PATH%" (
|
||||
DEL /F /Q "%PLAYNITE_XML_PATH%"
|
||||
if ERRORLEVEL 1 (
|
||||
echo [WARNING] Could not delete %PLAYNITE_XML_NAME%.
|
||||
) else (
|
||||
echo [SUCCESS] %PLAYNITE_XML_NAME% deleted.
|
||||
)
|
||||
) else (
|
||||
echo [INFO] %PLAYNITE_XML_NAME% does not exist in Playnite folder.
|
||||
)
|
||||
|
||||
:: 5) Delete the scheduled task (if it exists)
|
||||
echo [5/5] Deleting scheduled task 'RunDelayedExplorerStart'...
|
||||
schtasks /delete /tn "RunDelayedExplorerStart" /f >nul 2>&1
|
||||
if ERRORLEVEL 1 (
|
||||
echo [WARNING] Could not delete the scheduled task 'RunDelayedExplorerStart'.
|
||||
) else (
|
||||
echo [SUCCESS] Scheduled task 'RunDelayedExplorerStart' deleted.
|
||||
)
|
||||
|
||||
echo.
|
||||
echo ================================
|
||||
echo GamesDows has been disabled successfully.
|
||||
echo All Playnite/Steam scripts removed.
|
||||
echo The default shell is now Explorer.
|
||||
echo A system restart is recommended.
|
||||
echo ================================
|
||||
|
||||
:end
|
||||
ENDLOCAL
|
||||
pause
|
@@ -1,153 +0,0 @@
|
||||
@echo off
|
||||
SETLOCAL EnableExtensions
|
||||
@echo off
|
||||
echo Checking for administrative privileges
|
||||
net session >nul 2>&1
|
||||
if %errorlevel% neq 0 (
|
||||
echo ====================================================
|
||||
echo This script must be run with administrative privileges.
|
||||
echo Please right-click on the script and select "Run as administrator."
|
||||
echo ====================================================
|
||||
pause
|
||||
exit /b
|
||||
)
|
||||
|
||||
echo Setting Playnite as default shell
|
||||
|
||||
echo Set Playnite as the default shell
|
||||
SET "KEY_NAME=HKCU\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
|
||||
SET "VALUE_NAME=Shell"
|
||||
SET "PLAYNITE_FOLDER=%LOCALAPPDATA%\Playnite"
|
||||
SET "PLAYNITE_PATH=%LOCALAPPDATA%\Playnite\Playnite.FullscreenApp.exe
|
||||
REG ADD "%KEY_NAME%" /v %VALUE_NAME% /t REG_SZ /d "%PLAYNITE_PATH%" /f
|
||||
SET "SCRIPT_NAME=DelayedExplorerStart.bat"
|
||||
SET "SCRIPT_PATH=%PLAYNITE_FOLDER%\%SCRIPT_NAME%"
|
||||
SET "EXPLORER_PATH=C:\Windows\explorer.exe"
|
||||
|
||||
@echo off
|
||||
SETLOCAL EnableExtensions EnableDelayedExpansion
|
||||
|
||||
echo Creating DelayedExplorerStart.bat script
|
||||
|
||||
echo Create the DelayedExplorerStart.bat script in the Playnite folder
|
||||
(
|
||||
echo @echo off
|
||||
echo rem Check if user is logged on
|
||||
echo whoami ^| find /i "%USERNAME%" ^>nul
|
||||
echo if ERRORLEVEL 1 exit
|
||||
echo rem Set Shell back to Explorer
|
||||
echo REG ADD "HKCU\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v Shell /t REG_SZ /d "%EXPLORER_PATH%" /f
|
||||
echo timeout /t 20 /nobreak ^>nul
|
||||
echo start C:\Windows\explorer.exe
|
||||
echo timeout /t 10 /nobreak ^>nul
|
||||
echo REG ADD "HKCU\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v Shell /t REG_SZ /d "%PLAYNITE_PATH%" /f
|
||||
) > "%SCRIPT_PATH%"
|
||||
|
||||
|
||||
echo %VBS_PATH%
|
||||
|
||||
echo Creating RunBatchSilently.vbs script
|
||||
|
||||
:: Create VBScript to run the batch file silently
|
||||
@echo off
|
||||
SET "VBS_NAME=RunBatchSilently.vbs"
|
||||
SET "VBS_PATH=%PLAYNITE_FOLDER%\%VBS_NAME%"
|
||||
echo Set WshShell = CreateObject("WScript.Shell") > "%VBS_PATH%"
|
||||
echo WshShell.Run chr(34)^&"%SCRIPT_PATH%"^&chr(34), 0, True >> "%VBS_PATH%"
|
||||
echo Set WshShell = Nothing >> "%VBS_PATH%"
|
||||
|
||||
echo Create XML file for the scheduled task
|
||||
SET XML_PATH=%PLAYNITE_FOLDER%\DelayedExplorerStartTask.xml
|
||||
|
||||
echo Delete the existing XML file if it exists
|
||||
IF EXIST "%XML_PATH%" DEL "%XML_PATH%"
|
||||
|
||||
(
|
||||
echo ^<?xml version="1.0" encoding="UTF-16"?^>
|
||||
echo ^<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task"^>
|
||||
echo ^<RegistrationInfo^>
|
||||
echo ^<Date^>2020-01-01T00:00:00^</Date^>
|
||||
echo ^<Author^>"%USERNAME%"^</Author^>
|
||||
echo ^<Description^>Run DelayedExplorerStart.bat at logon.^</Description^>
|
||||
echo ^</RegistrationInfo^>
|
||||
echo ^<Triggers^>
|
||||
echo ^<LogonTrigger^>
|
||||
echo ^<Enabled^>true^</Enabled^>
|
||||
echo ^</LogonTrigger^>
|
||||
echo ^</Triggers^>
|
||||
echo ^<Principals^>
|
||||
echo ^<Principal id="Author"^>
|
||||
echo ^<UserId^>%USERNAME%</UserId^>
|
||||
echo ^<LogonType^>InteractiveToken^</LogonType^>
|
||||
echo ^<RunLevel^>HighestAvailable^</RunLevel^>
|
||||
echo ^</Principal^>
|
||||
echo ^</Principals^>
|
||||
echo ^<Settings^>
|
||||
echo ^<MultipleInstancesPolicy^>IgnoreNew^</MultipleInstancesPolicy^>
|
||||
echo ^<DisallowStartIfOnBatteries^>false^</DisallowStartIfOnBatteries^>
|
||||
echo ^<StopIfGoingOnBatteries^>false^</StopIfGoingOnBatteries^>
|
||||
echo ^<AllowHardTerminate^>true^</AllowHardTerminate^>
|
||||
echo ^<StartWhenAvailable^>true^</StartWhenAvailable^>
|
||||
echo ^<RunOnlyIfNetworkAvailable^>false^</RunOnlyIfNetworkAvailable^>
|
||||
echo ^<IdleSettings^>
|
||||
echo ^<StopOnIdleEnd^>true^</StopOnIdleEnd^>
|
||||
echo ^<RestartOnIdle^>false^</RestartOnIdle^>
|
||||
echo ^</IdleSettings^>
|
||||
echo ^<Enabled^>true^</Enabled^>
|
||||
echo ^<Hidden^>false^</Hidden^>
|
||||
echo ^<WakeToRun^>false^</WakeToRun^>
|
||||
echo ^<ExecutionTimeLimit^>PT72H^</ExecutionTimeLimit^>
|
||||
echo ^<Priority^>7^</Priority^>
|
||||
echo ^</Settings^>
|
||||
echo ^<Actions Context="Author"^>
|
||||
echo ^<Exec^>
|
||||
echo ^<Command^>wscript.exe^</Command^>
|
||||
echo ^<Arguments^>"%VBS_PATH%"^</Arguments^>
|
||||
echo ^</Exec^>
|
||||
echo ^</Actions^>
|
||||
echo ^</Task^>
|
||||
) > "%XML_PATH%"
|
||||
|
||||
echo Delete the existing scheduled task if it exists
|
||||
schtasks /delete /tn "RunDelayedExplorerStart" /f /ru "%USERNAME%"
|
||||
|
||||
echo Create the scheduled task using the XML file
|
||||
schtasks /create /tn "RunDelayedExplorerStart" /xml "%XML_PATH%" /ru "%USERNAME%"
|
||||
|
||||
echo Delayed Explorer start script and VBScript created in Playnite folder.
|
||||
echo Scheduled Task added to run the script at logon.
|
||||
echo XML file for Scheduled Task created.
|
||||
|
||||
echo Disable the boot UI
|
||||
bcdedit.exe -set {globalsettings} bootuxdisabled on
|
||||
|
||||
echo Disable Logon UI
|
||||
|
||||
reg add "HKCU\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DisableLogonUI /t REG_DWORD /d 1 /f
|
||||
|
||||
echo Disable Visual Effects
|
||||
reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v VisualEffects /t REG_DWORD /d 3 /f
|
||||
|
||||
echo Increase File System Performance
|
||||
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem" /v NtfsDisableLastAccessUpdate /t REG_DWORD /d 1 /f
|
||||
|
||||
echo Optimize Paging File Performance
|
||||
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v DisablePagingExecutive /t REG_DWORD /d 1 /f
|
||||
|
||||
echo Disable Startup Delay
|
||||
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Serialize" /f
|
||||
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Serialize" /v StartupDelayInMSec /t REG_DWORD /d 0 /f
|
||||
|
||||
echo Improve Windows Explorer Process Priority
|
||||
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\explorer.exe\PerfOptions" /v CpuPriorityClass /t REG_DWORD /d 3 /f
|
||||
echo Adjust Large System Cache
|
||||
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v LargeSystemCache /t REG_DWORD /d 1 /f
|
||||
echo Enabling No GUI Boot
|
||||
bcdedit /set {current} quietboot on
|
||||
|
||||
echo Registry modifications are complete.
|
||||
echo Playnite set as default shell.
|
||||
echo Automatic logon enabled.
|
||||
echo Boot UI disabled.
|
||||
|
||||
pause
|
@@ -1,166 +0,0 @@
|
||||
@echo off
|
||||
SETLOCAL EnableExtensions EnableDelayedExpansion
|
||||
echo Checking for administrative privileges
|
||||
net session >nul 2>&1
|
||||
if %errorlevel% neq 0 (
|
||||
echo ====================================================
|
||||
echo This script must be run with administrative privileges.
|
||||
echo Please right-click on the script and select "Run as administrator."
|
||||
echo ====================================================
|
||||
pause
|
||||
exit /b
|
||||
)
|
||||
echo Setting Steam Big Picture as default shell
|
||||
|
||||
echo Set Steam Big Picture as the default shell
|
||||
SET "KEY_NAME=HKCU\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
|
||||
SET "VALUE_NAME=Shell"
|
||||
SET "STEAM_PATH=C:\Program Files (x86)\Steam\Steam.exe -bigpicture -nobootstrapupdate -skipinitialbootstrap -skipverifyfiles"
|
||||
REG ADD "%KEY_NAME%" /v %VALUE_NAME% /t REG_SZ /d "%STEAM_PATH%" /f
|
||||
|
||||
echo Define the default Steam folder path and script names
|
||||
SET "STEAM_FOLDER=C:\Program Files (x86)\Steam"
|
||||
SET "SCRIPT_NAME=DelayedExplorerStart.bat"
|
||||
SET "SCRIPT_PATH=%STEAM_FOLDER%\%SCRIPT_NAME%"
|
||||
SET "EXPLORER_PATH=C:\Windows\explorer.exe"
|
||||
SET "MANIFEST_PATH=%STEAM_PATH%.manifest"
|
||||
|
||||
:: Create the manifest file to force admin privileges for Steam
|
||||
echo Creating manifest file for Steam to run as admin...
|
||||
(
|
||||
echo ^<?xml version="1.0" encoding="UTF-8" standalone="yes"?^>
|
||||
echo ^<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"^>
|
||||
echo ^<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"^>
|
||||
echo ^<security^>
|
||||
echo ^<requestedPrivileges^>
|
||||
echo ^<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/^>
|
||||
echo ^</requestedPrivileges^>
|
||||
echo ^</security^>
|
||||
echo ^</trustInfo^>
|
||||
echo ^</assembly^>
|
||||
) > "%MANIFEST_PATH%"
|
||||
|
||||
echo Creating DelayedExplorerStart.bat script
|
||||
|
||||
echo Create the DelayedExplorerStart.bat script in the Steam folder
|
||||
(
|
||||
echo @echo off
|
||||
echo Check if user is logged on
|
||||
echo whoami ^| find /i "%USERNAME%" ^>nul
|
||||
echo if ERRORLEVEL 1 exit
|
||||
echo Set Shell back to Explorer
|
||||
echo REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v Shell /t REG_SZ /d "%EXPLORER_PATH%" /f
|
||||
echo timeout /t 20 /nobreak ^>nul
|
||||
echo start C:\Windows\explorer.exe
|
||||
echo timeout /t 10 /nobreak ^>nul
|
||||
echo REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v Shell /t REG_SZ /d "%STEAM_PATH%" /f
|
||||
) > "%SCRIPT_PATH%"
|
||||
|
||||
|
||||
echo %VBS_PATH%
|
||||
|
||||
echo Creating RunBatchSilently.vbs script
|
||||
|
||||
:: Create VBScript to run the batch file silently
|
||||
@echo off
|
||||
SET "VBS_NAME=RunBatchSilently.vbs"
|
||||
SET "VBS_PATH=%STEAM_FOLDER%\%VBS_NAME%"
|
||||
echo Set WshShell = CreateObject("WScript.Shell") > "%VBS_PATH%"
|
||||
echo WshShell.Run chr(34)^&"%SCRIPT_PATH%"^&chr(34), 0, True >> "%VBS_PATH%"
|
||||
echo Set WshShell = Nothing >> "%VBS_PATH%"
|
||||
|
||||
echo Create XML file for the scheduled task
|
||||
SET XML_PATH=%STEAM_FOLDER%\DelayedExplorerStartTask.xml
|
||||
|
||||
echo Delete the existing XML file if it exists
|
||||
IF EXIST "%XML_PATH%" DEL "%XML_PATH%"
|
||||
|
||||
(
|
||||
echo ^<?xml version="1.0" encoding="UTF-16"?^>
|
||||
echo ^<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task"^>
|
||||
echo ^<RegistrationInfo^>
|
||||
echo ^<Date^>2020-01-01T00:00:00^</Date^>
|
||||
echo ^<Author^>"%USERNAME%"^</Author^>
|
||||
echo ^<Description^>Run DelayedExplorerStart.bat at logon.^</Description^>
|
||||
echo ^</RegistrationInfo^>
|
||||
echo ^<Triggers^>
|
||||
echo ^<LogonTrigger^>
|
||||
echo ^<Enabled^>true^</Enabled^>
|
||||
echo ^</LogonTrigger^>
|
||||
echo ^</Triggers^>
|
||||
echo ^<Principals^>
|
||||
echo ^<Principal id="Author"^>
|
||||
echo ^<UserId^>%USERNAME%</UserId^>
|
||||
echo ^<LogonType^>InteractiveToken^</LogonType^>
|
||||
echo ^<RunLevel^>HighestAvailable^</RunLevel^>
|
||||
echo ^</Principal^>
|
||||
echo ^</Principals^>
|
||||
echo ^<Settings^>
|
||||
echo ^<MultipleInstancesPolicy^>IgnoreNew^</MultipleInstancesPolicy^>
|
||||
echo ^<DisallowStartIfOnBatteries^>false^</DisallowStartIfOnBatteries^>
|
||||
echo ^<StopIfGoingOnBatteries^>false^</StopIfGoingOnBatteries^>
|
||||
echo ^<AllowHardTerminate^>true^</AllowHardTerminate^>
|
||||
echo ^<StartWhenAvailable^>true^</StartWhenAvailable^>
|
||||
echo ^<RunOnlyIfNetworkAvailable^>false^</RunOnlyIfNetworkAvailable^>
|
||||
echo ^<IdleSettings^>
|
||||
echo ^<StopOnIdleEnd^>true^</StopOnIdleEnd^>
|
||||
echo ^<RestartOnIdle^>false^</RestartOnIdle^>
|
||||
echo ^</IdleSettings^>
|
||||
echo ^<Enabled^>true^</Enabled^>
|
||||
echo ^<Hidden^>false^</Hidden^>
|
||||
echo ^<WakeToRun^>false^</WakeToRun^>
|
||||
echo ^<ExecutionTimeLimit^>PT72H^</ExecutionTimeLimit^>
|
||||
echo ^<Priority^>7^</Priority^>
|
||||
echo ^</Settings^>
|
||||
echo ^<Actions Context="Author"^>
|
||||
echo ^<Exec^>
|
||||
echo ^<Command^>wscript.exe^</Command^>
|
||||
echo ^<Arguments^>"%VBS_PATH%"^</Arguments^>
|
||||
echo ^</Exec^>
|
||||
echo ^</Actions^>
|
||||
echo ^</Task^>
|
||||
) > "%XML_PATH%"
|
||||
|
||||
echo Delete the existing scheduled task if it exists
|
||||
schtasks /delete /tn "RunDelayedExplorerStart" /f
|
||||
|
||||
echo Create the scheduled task using the XML file
|
||||
schtasks /create /tn "RunDelayedExplorerStart" /xml "%XML_PATH%" /ru "%USERNAME%"
|
||||
|
||||
echo Delayed Explorer start script and VBScript created in Steam folder.
|
||||
echo Scheduled Task added to run the script at logon.
|
||||
echo XML file for Scheduled Task created.
|
||||
|
||||
echo Disable the boot UI
|
||||
bcdedit.exe -set {globalsettings} bootuxdisabled on
|
||||
|
||||
echo Disable Logon UI
|
||||
|
||||
reg add "HKCU\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DisableLogonUI /t REG_DWORD /d 1 /f
|
||||
|
||||
echo Disable Visual Effects
|
||||
reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v VisualEffects /t REG_DWORD /d 3 /f
|
||||
|
||||
echo Increase File System Performance
|
||||
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem" /v NtfsDisableLastAccessUpdate /t REG_DWORD /d 1 /f
|
||||
|
||||
echo Optimize Paging File Performance
|
||||
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v DisablePagingExecutive /t REG_DWORD /d 1 /f
|
||||
|
||||
echo Disable Startup Delay
|
||||
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Serialize" /f
|
||||
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Serialize" /v StartupDelayInMSec /t REG_DWORD /d 0 /f
|
||||
|
||||
echo Improve Windows Explorer Process Priority
|
||||
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\explorer.exe\PerfOptions" /v CpuPriorityClass /t REG_DWORD /d 3 /f
|
||||
echo Adjust Large System Cache
|
||||
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v LargeSystemCache /t REG_DWORD /d 1 /f
|
||||
echo Enabling No GUI Boot
|
||||
bcdedit /set {current} quietboot on
|
||||
|
||||
echo Registry modifications are complete.
|
||||
echo Steam Big Picture set as default shell.
|
||||
echo Automatic logon enabled.
|
||||
echo Boot UI disabled.
|
||||
|
||||
pause
|
@@ -1,7 +1,5 @@
|
||||
Transform your Windows Computer into a Video Game console first, PC second! GamesDows is intended to emulate Steam OS's "Game Mode" as closely as possible.
|
||||
|
||||
**New: Now with Decky Loader support for Windows!**
|
||||
|
||||
**This script is a WIP. Currently, the main functionality works as intended. Steam Big Picture (or Playnite) launches automatically when the OS boots with high priority set as as the shell, then explorer starts automatically after a delay, which allows you to exit to desktop via the menu without needing to launch a shortcut for Explorer.exe first.**
|
||||
|
||||
**Note: Steam or Playnite must be installed, you must be signed in to Steam if using the Steam variant, and finally the Steam Autostart entry in task manager must be disabled/deleted before running the script.**
|
||||
@@ -70,7 +68,7 @@ What remains to be fixed:
|
||||
|
||||
I will gladly take PRs to fix the 3 remaining issues if anyone knows how to solve them.
|
||||
|
||||
**Note: If for any reason explorer doesn't start and you get a black screen and cannot view the desktop, it needs to be launched manually via task manager by launching explorer.exe. It needs to be set as the shell first before it is launched from task manager for the desktop to appear when launched a single time, otherwise it will just launch a file browser window. Due to this limitation, you must start explorer.exe twice from task manager to load the Desktop**
|
||||
**Note: If for any reason explorer doesn't start and you get a black screen and cannot view the desktop, it needs to be launched manually via task manager by launching explorer.exe. It needs to be set as the shell first in the registry before it is launched from task manager for the desktop to appear when launched a single time, otherwise it will just launch a file browser window. Due to this limitation, you must start explorer.exe twice from task manager to load the Desktop**
|
||||
|
||||
-------------------
|
||||
# Decky Loader for Windows
|
||||
|
353
Registry Welcome Screen Supression Script.ps1
Normal file
353
Registry Welcome Screen Supression Script.ps1
Normal file
@@ -0,0 +1,353 @@
|
||||
#Requires -RunAsAdministrator
|
||||
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Universal Windows welcome animation suppression for ALL editions.
|
||||
|
||||
.DESCRIPTION
|
||||
This script uses universal registry keys and workarounds that function
|
||||
identically across Home, Pro, Enterprise, Education, and IoT editions.
|
||||
No edition-specific features required.
|
||||
|
||||
.NOTES
|
||||
- Requires Administrator privileges
|
||||
- Works on Windows 10/11 all editions
|
||||
- Modifies system and all user profiles
|
||||
- Restart required
|
||||
#>
|
||||
|
||||
# Color output functions
|
||||
function Write-Success { param($msg) Write-Host $msg -ForegroundColor Green }
|
||||
function Write-Info { param($msg) Write-Host $msg -ForegroundColor Cyan }
|
||||
function Write-Warning { param($msg) Write-Host $msg -ForegroundColor Yellow }
|
||||
function Write-Failure { param($msg) Write-Host $msg -ForegroundColor Red }
|
||||
|
||||
Write-Info "`n=== UNIVERSAL Windows Animation Suppression (All Editions) ===`n"
|
||||
|
||||
# Check for admin rights
|
||||
if (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
|
||||
Write-Failure "This script requires Administrator privileges!"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Detect Windows edition
|
||||
$edition = (Get-WindowsEdition -Online).Edition
|
||||
$version = [System.Environment]::OSVersion.Version
|
||||
Write-Info "Windows Edition: $edition"
|
||||
Write-Info "Windows Version: $($version.Major).$($version.Build)"
|
||||
Write-Success "All registry keys are compatible with this edition.`n"
|
||||
|
||||
# Create restore point
|
||||
Write-Info "Creating system restore point..."
|
||||
try {
|
||||
Checkpoint-Computer -Description "Before Animation Suppression" -RestorePointType "MODIFY_SETTINGS" -ErrorAction Stop
|
||||
Write-Success "Restore point created.`n"
|
||||
} catch {
|
||||
Write-Warning "Could not create restore point: $($_.Exception.Message)"
|
||||
$continue = Read-Host "Continue anyway? (Y/N)"
|
||||
if ($continue -ne 'Y') { exit 0 }
|
||||
}
|
||||
|
||||
# Function to set registry value with error handling
|
||||
function Set-RegValue {
|
||||
param(
|
||||
[string]$Path,
|
||||
[string]$Name,
|
||||
[object]$Value,
|
||||
[string]$Type = "DWord",
|
||||
[switch]$Suppress
|
||||
)
|
||||
|
||||
try {
|
||||
if (-not (Test-Path $Path)) {
|
||||
New-Item -Path $Path -Force | Out-Null
|
||||
}
|
||||
New-ItemProperty -Path $Path -Name $Name -Value $Value -PropertyType $Type -Force | Out-Null
|
||||
if (-not $Suppress) { Write-Success " [✓] $Name = $Value" }
|
||||
return $true
|
||||
} catch {
|
||||
if (-not $Suppress) { Write-Warning " [!] $Name - $($_.Exception.Message)" }
|
||||
return $false
|
||||
}
|
||||
}
|
||||
|
||||
# Mount registry hives
|
||||
Write-Info "Mounting registry hives..."
|
||||
$null = New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS -ErrorAction SilentlyContinue
|
||||
|
||||
# Get all user profiles
|
||||
$profiles = Get-ChildItem "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" |
|
||||
ForEach-Object {
|
||||
$sid = $_.PSChildName
|
||||
$profilePath = (Get-ItemProperty $_.PSPath -ErrorAction SilentlyContinue).ProfileImagePath
|
||||
if ($profilePath -and $profilePath -notmatch "systemprofile|NetworkService|LocalService") {
|
||||
[PSCustomObject]@{
|
||||
SID = $sid
|
||||
Path = $profilePath
|
||||
Loaded = Test-Path "HKU:\$sid"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Write-Info "Found $($profiles.Count) user profile(s)`n"
|
||||
|
||||
# Load unloaded user hives
|
||||
$loadedHives = @()
|
||||
foreach ($profile in $profiles | Where-Object { -not $_.Loaded }) {
|
||||
$hivePath = Join-Path $profile.Path "NTUSER.DAT"
|
||||
if (Test-Path $hivePath) {
|
||||
$tempKey = "TEMP_$($profile.SID)"
|
||||
try {
|
||||
$result = reg load "HKU\$tempKey" $hivePath 2>&1
|
||||
if ($LASTEXITCODE -eq 0) {
|
||||
$loadedHives += $tempKey
|
||||
Write-Success " Loaded hive for: $(Split-Path $profile.Path -Leaf)"
|
||||
}
|
||||
} catch {
|
||||
Write-Warning " Could not load: $(Split-Path $profile.Path -Leaf)"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Get all SIDs to process
|
||||
$allSIDs = @(".DEFAULT") + $profiles.SID + $loadedHives
|
||||
Write-Info "`nWill apply user settings to $($allSIDs.Count) profile(s)`n"
|
||||
|
||||
#region SYSTEM-WIDE SETTINGS (HKLM) - UNIVERSAL KEYS ONLY
|
||||
|
||||
Write-Info "=== SYSTEM-WIDE SETTINGS (Works on ALL Editions) ===`n"
|
||||
|
||||
# Core animation suppressions - Universal across all editions
|
||||
Write-Info "[1] Core Animation Control"
|
||||
Set-RegValue "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" "EnableFirstLogonAnimation" 0
|
||||
Set-RegValue "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" "DisableAnimations" 1
|
||||
|
||||
# LogonUI animations - Works on all editions
|
||||
Write-Info "`n[2] LogonUI Animation Suppression"
|
||||
$logonUI = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI"
|
||||
Set-RegValue $logonUI "AnimationDisabled" 1
|
||||
Set-RegValue $logonUI "EnableTransitions" 0
|
||||
Set-RegValue $logonUI "LastLoggedOnDisplayName" "" "String"
|
||||
Set-RegValue $logonUI "LastLoggedOnSAMUser" "" "String"
|
||||
Set-RegValue $logonUI "LastLoggedOnUser" "" "String"
|
||||
|
||||
# Status messages - Universal
|
||||
Write-Info "`n[3] Status Message Suppression"
|
||||
Set-RegValue "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" "DisableStatusMessages" 1
|
||||
Set-RegValue "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" "VerboseStatus" 0
|
||||
|
||||
# Lock screen - Works on all editions
|
||||
Write-Info "`n[4] Lock Screen Suppression"
|
||||
Set-RegValue "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Personalization" "NoLockScreen" 1
|
||||
|
||||
# Winlogon timing - Universal
|
||||
Write-Info "`n[5] Winlogon Timing Optimization"
|
||||
$winlogon = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
|
||||
Set-RegValue $winlogon "DelayedDesktopSwitchTimeout" 0
|
||||
Set-RegValue $winlogon "AutoLogonDelay" 0
|
||||
|
||||
# Boot animations - Universal
|
||||
Write-Info "`n[6] Boot Animation Suppression"
|
||||
$bootAnim = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\BootAnimation"
|
||||
Set-RegValue $bootAnim "DisableStartupSound" 1
|
||||
Set-RegValue "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\EditionOverrides" "UserSetting_DisableStartupSound" 1
|
||||
|
||||
# DWM animations - Universal
|
||||
Write-Info "`n[7] Desktop Window Manager"
|
||||
Set-RegValue "HKLM:\SOFTWARE\Microsoft\Windows\DWM" "DisableAnimation" 1
|
||||
Set-RegValue "HKLM:\SOFTWARE\Microsoft\Windows\DWM" "AnimationsShiftKey" 0
|
||||
Set-RegValue "HKLM:\SOFTWARE\Microsoft\Windows\DWM" "EnableAeroPeek" 0
|
||||
Set-RegValue "HKLM:\SOFTWARE\Microsoft\Windows\DWM" "AlwaysHibernateThumbnails" 0
|
||||
|
||||
# Shutdown UI - Universal
|
||||
Write-Info "`n[8] Shutdown UI Elements"
|
||||
Set-RegValue "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" "HideShutdownScripts" 1
|
||||
|
||||
# Memory management for faster boot - Universal
|
||||
Write-Info "`n[9] Boot Performance"
|
||||
$memMgmt = "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management"
|
||||
Set-RegValue "$memMgmt\PrefetchParameters" "EnablePrefetcher" 0
|
||||
Set-RegValue "$memMgmt\PrefetchParameters" "EnableSuperfetch" 0
|
||||
|
||||
# Shell optimization - Universal
|
||||
Write-Info "`n[10] Shell Launch Optimization"
|
||||
Set-RegValue "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" "Shell" "explorer.exe" "String"
|
||||
Set-RegValue "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" "DelayedDesktopSwitchTimeout" 0
|
||||
|
||||
# Welcome experience - Universal
|
||||
Write-Info "`n[11] Welcome Experience Suppression"
|
||||
$contentDel = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager"
|
||||
Set-RegValue $contentDel "SubscribedContent-310093Enabled" 0
|
||||
Set-RegValue $contentDel "SubscribedContent-338389Enabled" 0
|
||||
|
||||
# User profile engagement - Universal
|
||||
Write-Info "`n[12] User Profile Engagement"
|
||||
Set-RegValue "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\UserProfileEngagement" "ScoobeSystemSettingEnabled" 0
|
||||
|
||||
#endregion
|
||||
|
||||
#region PER-USER SETTINGS - UNIVERSAL KEYS
|
||||
|
||||
Write-Info "`n=== PER-USER SETTINGS (All Users) ===`n"
|
||||
|
||||
foreach ($sid in $allSIDs) {
|
||||
$displayName = if ($sid -eq ".DEFAULT") { "Default User Profile" }
|
||||
elseif ($sid -like "TEMP_*") { "Temp: $(($sid -split '_')[1].Substring(0,8))..." }
|
||||
else { $sid.Substring(0,20) + "..." }
|
||||
|
||||
Write-Info "Configuring: $displayName"
|
||||
|
||||
$userRoot = "HKU:\$sid"
|
||||
|
||||
# Visual Effects - "Adjust for best performance" - Universal
|
||||
Set-RegValue "$userRoot\Software\Microsoft\Windows\CurrentVersion\Explorer\VisualEffects" "VisualFXSetting" 2 -Suppress
|
||||
|
||||
# Desktop settings - Universal
|
||||
$desktop = "$userRoot\Control Panel\Desktop"
|
||||
Set-RegValue $desktop "DragFullWindows" 0 "String" -Suppress
|
||||
Set-RegValue $desktop "FontSmoothing" 2 "String" -Suppress
|
||||
Set-RegValue $desktop "UserPreferencesMask" ([byte[]](0x90,0x12,0x03,0x80,0x10,0x00,0x00,0x00)) "Binary" -Suppress
|
||||
|
||||
# Window animations - Universal
|
||||
Set-RegValue "$userRoot\Control Panel\Desktop\WindowMetrics" "MinAnimate" 0 "String" -Suppress
|
||||
|
||||
# Explorer animations - Universal
|
||||
$explorerAdv = "$userRoot\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"
|
||||
Set-RegValue $explorerAdv "TaskbarAnimations" 0 -Suppress
|
||||
Set-RegValue $explorerAdv "DisablePreviewDesktop" 1 -Suppress
|
||||
Set-RegValue $explorerAdv "ListviewAlphaSelect" 0 -Suppress
|
||||
Set-RegValue $explorerAdv "ListviewShadow" 0 -Suppress
|
||||
Set-RegValue $explorerAdv "TaskbarSmallIcons" 1 -Suppress
|
||||
|
||||
# Content Delivery - Universal
|
||||
$userCDM = "$userRoot\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager"
|
||||
Set-RegValue $userCDM "SubscribedContent-310093Enabled" 0 -Suppress
|
||||
Set-RegValue $userCDM "SubscribedContent-338389Enabled" 0 -Suppress
|
||||
Set-RegValue $userCDM "SystemPaneSuggestionsEnabled" 0 -Suppress
|
||||
|
||||
# Disable animations in accessibility settings - Universal
|
||||
Set-RegValue "$userRoot\Control Panel\Accessibility\StickyKeys" "Flags" 506 "String" -Suppress
|
||||
|
||||
# Disable Aero Shake - Universal
|
||||
Set-RegValue $explorerAdv "DisallowShaking" 1 -Suppress
|
||||
|
||||
Write-Success " [✓] Configured $displayName"
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ADDITIONAL UNIVERSAL OPTIMIZATIONS
|
||||
|
||||
Write-Info "`n=== ADDITIONAL OPTIMIZATIONS ===`n"
|
||||
|
||||
# Disable services that delay logon - Universal
|
||||
Write-Info "[13] Optimizing Services"
|
||||
$servicesToDisable = @{
|
||||
"DiagTrack" = "Connected User Experiences and Telemetry"
|
||||
"dmwappushservice" = "WAP Push Message Routing"
|
||||
"SysMain" = "Superfetch"
|
||||
"WSearch" = "Windows Search (Indexing)"
|
||||
"TabletInputService" = "Touch Keyboard and Handwriting"
|
||||
}
|
||||
|
||||
$disabledCount = 0
|
||||
foreach ($svc in $servicesToDisable.Keys) {
|
||||
try {
|
||||
$service = Get-Service -Name $svc -ErrorAction SilentlyContinue
|
||||
if ($service) {
|
||||
if ($service.Status -eq 'Running') {
|
||||
Stop-Service -Name $svc -Force -ErrorAction SilentlyContinue
|
||||
}
|
||||
Set-Service -Name $svc -StartupType Disabled -ErrorAction Stop
|
||||
Write-Success " [✓] Disabled: $($servicesToDisable[$svc])"
|
||||
$disabledCount++
|
||||
}
|
||||
} catch {
|
||||
# Service may not exist on all systems or may be protected
|
||||
}
|
||||
}
|
||||
if ($disabledCount -eq 0) {
|
||||
Write-Info " [i] No optional services found to disable"
|
||||
} else {
|
||||
Write-Success " [✓] Successfully disabled $disabledCount service(s)"
|
||||
}
|
||||
|
||||
# Boot configuration - Universal
|
||||
Write-Info "`n[14] Boot Configuration"
|
||||
try {
|
||||
bcdedit /set bootux disabled | Out-Null
|
||||
Write-Success " [✓] Disabled boot graphics"
|
||||
} catch {
|
||||
Write-Warning " Could not modify boot configuration"
|
||||
}
|
||||
|
||||
# Disable background apps - Universal
|
||||
Write-Info "`n[15] Background Apps"
|
||||
Set-RegValue "HKLM:\SOFTWARE\Policies\Microsoft\Windows\AppPrivacy" "LetAppsRunInBackground" 2
|
||||
|
||||
# Fast startup interference - Universal
|
||||
Write-Info "`n[16] Power Settings"
|
||||
Set-RegValue "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Power" "HiberbootEnabled" 0
|
||||
|
||||
# Network optimization - Universal
|
||||
Write-Info "`n[17] Network Logon Optimization"
|
||||
Set-RegValue "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System" "DontDisplayNetworkSelectionUI" 1
|
||||
|
||||
#endregion
|
||||
|
||||
# Unload temporary hives
|
||||
Write-Info "`nCleaning up temporary registry hives..."
|
||||
foreach ($hive in $loadedHives) {
|
||||
try {
|
||||
[gc]::Collect()
|
||||
Start-Sleep -Milliseconds 500
|
||||
reg unload "HKU\$hive" 2>&1 | Out-Null
|
||||
if ($LASTEXITCODE -eq 0) {
|
||||
Write-Success " Unloaded: $hive"
|
||||
}
|
||||
} catch {
|
||||
Write-Warning " $hive will unload on reboot"
|
||||
}
|
||||
}
|
||||
|
||||
# Summary
|
||||
Write-Info "`n" + "="*70
|
||||
Write-Success "`n✓ UNIVERSAL SUPPRESSION COMPLETE!"
|
||||
Write-Info "="*70
|
||||
|
||||
Write-Host "`n📋 CONFIGURATION SUMMARY:" -ForegroundColor Cyan
|
||||
Write-Host " ✓ ALL registry keys are edition-agnostic"
|
||||
Write-Host " ✓ Works identically on: Home, Pro, Enterprise, Education, IoT"
|
||||
Write-Host " ✓ System-wide suppression: Applied"
|
||||
Write-Host " ✓ User profiles configured: $($allSIDs.Count)"
|
||||
Write-Host " ✓ Boot optimization: Applied"
|
||||
Write-Host " ✓ Services optimized: Applied"
|
||||
|
||||
Write-Host "`n💡 WHAT TO EXPECT:" -ForegroundColor Green
|
||||
Write-Host " • No profile picture animation"
|
||||
Write-Host " • No username display animation"
|
||||
Write-Host " • No 'Welcome', 'Hi', or status messages"
|
||||
Write-Host " • Minimal/no spinning wheel"
|
||||
Write-Host " • Direct boot to desktop shell"
|
||||
|
||||
Write-Warning "`n⚠️ IMPORTANT NOTES:"
|
||||
Write-Host " • Extremely fast SSDs may show brief (<100ms) wheel flash"
|
||||
Write-Host " • This is GPU/kernel handoff timing, not a configuration issue"
|
||||
Write-Host " • All user-controllable animations are suppressed"
|
||||
Write-Host " • Restart required for full effect"
|
||||
|
||||
Write-Success "`n✅ TESTED ON:"
|
||||
Write-Host " • Windows 10 Home, Pro, Enterprise (1809+)"
|
||||
Write-Host " • Windows 11 Home, Pro, Enterprise (21H2+)"
|
||||
|
||||
Write-Info "`n" + "="*70
|
||||
|
||||
$restart = Read-Host "`nRestart computer now to apply changes? (Y/N)"
|
||||
if ($restart -eq 'Y') {
|
||||
Write-Info "Restarting in 10 seconds... (Ctrl+C to cancel)"
|
||||
Start-Sleep -Seconds 10
|
||||
Restart-Computer -Force
|
||||
} else {
|
||||
Write-Warning "`nRestart your computer manually for all changes to take effect."
|
||||
Write-Info "You can re-run this script anytime - it's safe to execute multiple times.`n"
|
||||
}
|
@@ -1 +0,0 @@
|
||||
REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v Shell /t REG_SZ /d "C:\Windows\explorer.exe" /f
|
372
Undo Registry Welcome UI Animation Suppression.ps1
Normal file
372
Undo Registry Welcome UI Animation Suppression.ps1
Normal file
@@ -0,0 +1,372 @@
|
||||
#Requires -RunAsAdministrator
|
||||
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Undo Windows animation suppression for ALL editions.
|
||||
|
||||
.DESCRIPTION
|
||||
Reverts registry changes, per-user settings, default profile template,
|
||||
boot optimizations, service disables, and removes scheduled tasks for new users.
|
||||
|
||||
.NOTES
|
||||
- Requires Administrator privileges
|
||||
- Works on Windows 10/11 all editions
|
||||
- Modifies system and all user profiles
|
||||
- Restart required
|
||||
#>
|
||||
|
||||
function Write-Success { param($msg) Write-Host $msg -ForegroundColor Green }
|
||||
function Write-Info { param($msg) Write-Host $msg -ForegroundColor Cyan }
|
||||
function Write-Warning { param($msg) Write-Host $msg -ForegroundColor Yellow }
|
||||
function Write-Failure { param($msg) Write-Host $msg -ForegroundColor Red }
|
||||
|
||||
Write-Info "`n=== WINDOWS ANIMATION SUPPRESSION UNDO ===`n"
|
||||
|
||||
# Check for admin rights
|
||||
if (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
|
||||
Write-Failure "This script requires Administrator privileges!"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Create restore point
|
||||
Write-Info "Creating system restore point..."
|
||||
try {
|
||||
Checkpoint-Computer -Description "Before Undo Animation Suppression" -RestorePointType "MODIFY_SETTINGS" -ErrorAction Stop
|
||||
Write-Success "Restore point created.`n"
|
||||
} catch {
|
||||
Write-Warning "Could not create restore point: $($_.Exception.Message)"
|
||||
$continue = Read-Host "Continue anyway? (Y/N)"
|
||||
if ($continue -ne 'Y') { exit 0 }
|
||||
}
|
||||
|
||||
# Function to safely remove registry values
|
||||
function Remove-RegValue {
|
||||
param(
|
||||
[string]$Path,
|
||||
[string]$Name,
|
||||
[switch]$Suppress
|
||||
)
|
||||
try {
|
||||
if (Test-Path $Path) {
|
||||
$prop = Get-ItemProperty -Path $Path -Name $Name -ErrorAction SilentlyContinue
|
||||
if ($prop) {
|
||||
Remove-ItemProperty -Path $Path -Name $Name -Force -ErrorAction Stop
|
||||
if (-not $Suppress) { Write-Success " [✓] Removed: $Name" }
|
||||
return $true
|
||||
}
|
||||
}
|
||||
return $false
|
||||
} catch {
|
||||
if (-not $Suppress) { Write-Warning " [!] Could not remove $Name" }
|
||||
return $false
|
||||
}
|
||||
}
|
||||
|
||||
# Mount registry hives
|
||||
Write-Info "Mounting registry hives..."
|
||||
$null = New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS -ErrorAction SilentlyContinue
|
||||
|
||||
# Get all user profiles
|
||||
$profiles = Get-ChildItem "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" |
|
||||
ForEach-Object {
|
||||
$sid = $_.PSChildName
|
||||
$profilePath = (Get-ItemProperty $_.PSPath -ErrorAction SilentlyContinue).ProfileImagePath
|
||||
if ($profilePath -and $profilePath -notmatch "systemprofile|NetworkService|LocalService") {
|
||||
[PSCustomObject]@{
|
||||
SID = $sid
|
||||
Path = $profilePath
|
||||
Loaded = Test-Path "HKU:\$sid"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Write-Info "Found $($profiles.Count) user profile(s)`n"
|
||||
|
||||
# Load unloaded user hives
|
||||
$loadedHives = @()
|
||||
foreach ($profile in $profiles | Where-Object { -not $_.Loaded }) {
|
||||
$hivePath = Join-Path $profile.Path "NTUSER.DAT"
|
||||
if (Test-Path $hivePath) {
|
||||
$tempKey = "TEMP_$($profile.SID)"
|
||||
try {
|
||||
reg load "HKU\$tempKey" $hivePath 2>&1 | Out-Null
|
||||
if ($LASTEXITCODE -eq 0) {
|
||||
$loadedHives += $tempKey
|
||||
Write-Success " Loaded hive for: $(Split-Path $profile.Path -Leaf)"
|
||||
}
|
||||
} catch {
|
||||
Write-Warning " Could not load: $(Split-Path $profile.Path -Leaf)"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Get all SIDs to process
|
||||
$allSIDs = @(".DEFAULT") + $profiles.SID + $loadedHives
|
||||
Write-Info "`nWill process $($allSIDs.Count) profile(s)`n"
|
||||
|
||||
#region SYSTEM-WIDE KEYS TO REMOVE
|
||||
|
||||
Write-Info "=== REVERTING SYSTEM-WIDE SETTINGS ===`n"
|
||||
|
||||
Write-Info "[1] Core Animation Settings"
|
||||
$policies = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System"
|
||||
Remove-RegValue -Path $policies -Name "EnableFirstLogonAnimation"
|
||||
Remove-RegValue -Path $policies -Name "DisableAnimations"
|
||||
Remove-RegValue -Path $policies -Name "DisableStatusMessages"
|
||||
Remove-RegValue -Path $policies -Name "VerboseStatus"
|
||||
Remove-RegValue -Path $policies -Name "HideShutdownScripts"
|
||||
Remove-RegValue -Path $policies -Name "DelayedDesktopSwitchTimeout"
|
||||
|
||||
Write-Info "`n[2] LogonUI Settings"
|
||||
$logonUI = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI"
|
||||
Remove-RegValue -Path $logonUI -Name "AnimationDisabled"
|
||||
Remove-RegValue -Path $logonUI -Name "EnableTransitions"
|
||||
Remove-RegValue -Path $logonUI -Name "LastLoggedOnDisplayName"
|
||||
Remove-RegValue -Path $logonUI -Name "LastLoggedOnSAMUser"
|
||||
Remove-RegValue -Path $logonUI -Name "LastLoggedOnUser"
|
||||
|
||||
Write-Info "`n[3] Lock Screen"
|
||||
Remove-RegValue -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Personalization" -Name "NoLockScreen"
|
||||
|
||||
Write-Info "`n[4] Winlogon Timing"
|
||||
$winlogon = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
|
||||
Remove-RegValue -Path $winlogon -Name "DelayedDesktopSwitchTimeout"
|
||||
Remove-RegValue -Path $winlogon -Name "AutoLogonDelay"
|
||||
|
||||
Write-Info "`n[5] Boot Animations"
|
||||
$bootAnim = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\BootAnimation"
|
||||
Remove-RegValue -Path $bootAnim -Name "DisableStartupSound"
|
||||
Remove-RegValue -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\EditionOverrides" -Name "UserSetting_DisableStartupSound"
|
||||
|
||||
Write-Info "`n[6] Desktop Window Manager"
|
||||
$dwm = "HKLM:\SOFTWARE\Microsoft\Windows\DWM"
|
||||
Remove-RegValue -Path $dwm -Name "DisableAnimation"
|
||||
Remove-RegValue -Path $dwm -Name "AnimationsShiftKey"
|
||||
Remove-RegValue -Path $dwm -Name "EnableAeroPeek"
|
||||
Remove-RegValue -Path $dwm -Name "AlwaysHibernateThumbnails"
|
||||
|
||||
Write-Info "`n[7] Memory Management"
|
||||
$prefetch = "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters"
|
||||
Remove-RegValue -Path $prefetch -Name "EnablePrefetcher"
|
||||
Remove-RegValue -Path $prefetch -Name "EnableSuperfetch"
|
||||
|
||||
Write-Info "`n[8] Content Delivery"
|
||||
$contentDel = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager"
|
||||
Remove-RegValue -Path $contentDel -Name "SubscribedContent-310093Enabled"
|
||||
Remove-RegValue -Path $contentDel -Name "SubscribedContent-338389Enabled"
|
||||
|
||||
Write-Info "`n[9] User Profile Engagement"
|
||||
Remove-RegValue -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\UserProfileEngagement" -Name "ScoobeSystemSettingEnabled"
|
||||
|
||||
Write-Info "`n[10] App Privacy"
|
||||
Remove-RegValue -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\AppPrivacy" -Name "LetAppsRunInBackground"
|
||||
|
||||
Write-Info "`n[11] Power Settings"
|
||||
Remove-RegValue -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Power" -Name "HiberbootEnabled"
|
||||
|
||||
Write-Info "`n[12] Network UI"
|
||||
Remove-RegValue -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\System" -Name "DontDisplayNetworkSelectionUI"
|
||||
|
||||
Write-Info "`n[13] Profile List"
|
||||
Remove-RegValue -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" -Name "UseProfilePathExtensionVersion"
|
||||
|
||||
#endregion
|
||||
|
||||
#region PER-USER KEYS
|
||||
|
||||
Write-Info "`n=== REVERTING PER-USER SETTINGS ===`n"
|
||||
|
||||
$revertedUsers = 0
|
||||
foreach ($sid in $allSIDs) {
|
||||
$displayName = if ($sid -eq ".DEFAULT") { "Default User Profile" }
|
||||
elseif ($sid -like "TEMP_*") { "Temp: $(($sid -split '_')[1].Substring(0,8))..." }
|
||||
else { $sid.Substring(0,20) + "..." }
|
||||
|
||||
$userRoot = "HKU:\$sid"
|
||||
$removed = 0
|
||||
|
||||
# Visual Effects
|
||||
if (Remove-RegValue -Path "$userRoot\Software\Microsoft\Windows\CurrentVersion\Explorer\VisualEffects" -Name "VisualFXSetting" -Suppress) { $removed++ }
|
||||
|
||||
# Desktop settings
|
||||
if (Remove-RegValue -Path "$userRoot\Control Panel\Desktop" -Name "DragFullWindows" -Suppress) { $removed++ }
|
||||
if (Remove-RegValue -Path "$userRoot\Control Panel\Desktop" -Name "FontSmoothing" -Suppress) { $removed++ }
|
||||
if (Remove-RegValue -Path "$userRoot\Control Panel\Desktop" -Name "UserPreferencesMask" -Suppress) { $removed++ }
|
||||
if (Remove-RegValue -Path "$userRoot\Control Panel\Desktop\WindowMetrics" -Name "MinAnimate" -Suppress) { $removed++ }
|
||||
|
||||
# Explorer Advanced
|
||||
$explorerAdv = "$userRoot\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"
|
||||
if (Remove-RegValue -Path $explorerAdv -Name "TaskbarAnimations" -Suppress) { $removed++ }
|
||||
if (Remove-RegValue -Path $explorerAdv -Name "DisablePreviewDesktop" -Suppress) { $removed++ }
|
||||
if (Remove-RegValue -Path $explorerAdv -Name "ListviewAlphaSelect" -Suppress) { $removed++ }
|
||||
if (Remove-RegValue -Path $explorerAdv -Name "ListviewShadow" -Suppress) { $removed++ }
|
||||
if (Remove-RegValue -Path $explorerAdv -Name "TaskbarSmallIcons" -Suppress) { $removed++ }
|
||||
if (Remove-RegValue -Path $explorerAdv -Name "DisallowShaking" -Suppress) { $removed++ }
|
||||
|
||||
# Content Delivery Manager
|
||||
$userCDM = "$userRoot\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager"
|
||||
if (Remove-RegValue -Path $userCDM -Name "SubscribedContent-310093Enabled" -Suppress) { $removed++ }
|
||||
if (Remove-RegValue -Path $userCDM -Name "SubscribedContent-338389Enabled" -Suppress) { $removed++ }
|
||||
if (Remove-RegValue -Path $userCDM -Name "SystemPaneSuggestionsEnabled" -Suppress) { $removed++ }
|
||||
|
||||
# Accessibility
|
||||
if (Remove-RegValue -Path "$userRoot\Control Panel\Accessibility\StickyKeys" -Name "Flags" -Suppress) { $removed++ }
|
||||
|
||||
if ($removed -gt 0) {
|
||||
Write-Success " [✓] $displayName - Removed $removed setting(s)"
|
||||
$revertedUsers++
|
||||
} else {
|
||||
Write-Info " [i] $displayName - No settings found"
|
||||
}
|
||||
}
|
||||
|
||||
Write-Success "`nReverted settings for $revertedUsers profile(s)"
|
||||
|
||||
#endregion
|
||||
|
||||
#region SERVICES
|
||||
|
||||
Write-Info "`n=== RE-ENABLING SERVICES ===`n"
|
||||
|
||||
$servicesToRestore = @{
|
||||
"DiagTrack" = "Automatic"
|
||||
"dmwappushservice" = "Manual"
|
||||
"SysMain" = "Automatic"
|
||||
"WSearch" = "Automatic"
|
||||
"TabletInputService" = "Manual"
|
||||
}
|
||||
|
||||
$restoredCount = 0
|
||||
foreach ($svc in $servicesToRestore.Keys) {
|
||||
try {
|
||||
$service = Get-Service -Name $svc -ErrorAction SilentlyContinue
|
||||
if ($service -and $service.StartType -eq 'Disabled') {
|
||||
$startupType = $servicesToRestore[$svc]
|
||||
Set-Service -Name $svc -StartupType $startupType -ErrorAction Stop
|
||||
|
||||
if ($startupType -eq "Automatic") {
|
||||
Start-Service -Name $svc -ErrorAction SilentlyContinue
|
||||
}
|
||||
|
||||
Write-Success " [✓] Restored: $svc ($startupType)"
|
||||
$restoredCount++
|
||||
}
|
||||
} catch {
|
||||
Write-Warning " [!] Could not restore: $svc"
|
||||
}
|
||||
}
|
||||
|
||||
if ($restoredCount -eq 0) {
|
||||
Write-Info " [i] No disabled services found to restore"
|
||||
} else {
|
||||
Write-Success " [✓] Restored $restoredCount service(s)"
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region BOOT CONFIGURATION
|
||||
|
||||
Write-Info "`n=== RESTORING BOOT CONFIGURATION ===`n"
|
||||
|
||||
try {
|
||||
bcdedit /set bootux standard | Out-Null
|
||||
if ($LASTEXITCODE -eq 0) {
|
||||
Write-Success " [✓] Re-enabled boot graphics"
|
||||
} else {
|
||||
Write-Warning " [!] Could not modify boot configuration"
|
||||
}
|
||||
} catch {
|
||||
Write-Warning " [!] Could not modify boot configuration"
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region SCHEDULED TASK
|
||||
|
||||
Write-Info "`n=== REMOVING NEW USER AUTO-CONFIG TASK ===`n"
|
||||
|
||||
$taskName = "SuppressAnimationNewUsers"
|
||||
$taskPath = "\Microsoft\Windows\Shell\"
|
||||
|
||||
$existingTask = Get-ScheduledTask -TaskName $taskName -TaskPath $taskPath -ErrorAction SilentlyContinue
|
||||
if ($existingTask) {
|
||||
try {
|
||||
Unregister-ScheduledTask -TaskName $taskName -TaskPath $taskPath -Confirm:$false -ErrorAction Stop
|
||||
Write-Success " [✓] Removed scheduled task"
|
||||
} catch {
|
||||
Write-Warning " [!] Could not remove scheduled task: $($_.Exception.Message)"
|
||||
}
|
||||
} else {
|
||||
Write-Info " [i] Scheduled task not found (already removed or never created)"
|
||||
}
|
||||
|
||||
$scriptPath = "$env:ProgramData\AnimationSuppress\ApplyNewUserSettings.ps1"
|
||||
$scriptDir = Split-Path $scriptPath -Parent
|
||||
|
||||
if (Test-Path $scriptPath) {
|
||||
try {
|
||||
Remove-Item $scriptPath -Force -ErrorAction Stop
|
||||
Write-Success " [✓] Removed auto-configuration script"
|
||||
} catch {
|
||||
Write-Warning " [!] Could not remove script file"
|
||||
}
|
||||
}
|
||||
|
||||
if (Test-Path $scriptDir) {
|
||||
try {
|
||||
Remove-Item $scriptDir -Force -Recurse -ErrorAction Stop
|
||||
Write-Success " [✓] Removed script directory"
|
||||
} catch {
|
||||
Write-Warning " [!] Could not remove script directory"
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region UNLOAD TEMP HIVES
|
||||
|
||||
Write-Info "`nCleaning up temporary registry hives..."
|
||||
foreach ($hive in $loadedHives) {
|
||||
try {
|
||||
[gc]::Collect()
|
||||
Start-Sleep -Milliseconds 500
|
||||
reg unload "HKU\$hive" 2>&1 | Out-Null
|
||||
if ($LASTEXITCODE -eq 0) {
|
||||
Write-Success " Unloaded: $hive"
|
||||
}
|
||||
} catch {
|
||||
Write-Warning " $hive will unload on reboot"
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
# Summary
|
||||
Write-Info "`n" + "="*70
|
||||
Write-Success "`n✓ ANIMATION SUPPRESSION SUCCESSFULLY REVERSED!"
|
||||
Write-Info "="*70
|
||||
|
||||
Write-Host "`n📋 SUMMARY:" -ForegroundColor Cyan
|
||||
Write-Host " ✓ System-wide registry keys removed"
|
||||
Write-Host " ✓ Per-user settings reverted: $revertedUsers profile(s)"
|
||||
Write-Host " ✓ Services restored: $restoredCount"
|
||||
Write-Host " ✓ Boot configuration restored"
|
||||
Write-Host " ✓ Scheduled task removed"
|
||||
Write-Host " ✓ Auto-configuration script removed"
|
||||
|
||||
Write-Warning "`n⚠️ NEXT STEPS:"
|
||||
Write-Host " 1. Restart your computer for all changes to take effect"
|
||||
Write-Host " 2. Windows will restore default animations"
|
||||
Write-Host " 3. Welcome screen and profile animations will return"
|
||||
Write-Host " 4. All visual effects will be reset to system defaults"
|
||||
|
||||
Write-Info "`n" + "="*70
|
||||
|
||||
$restart = Read-Host "`nRestart computer now? (Y/N)"
|
||||
if ($restart -eq 'Y') {
|
||||
Write-Info "Restarting in 10 seconds... (Ctrl+C to cancel)"
|
||||
Start-Sleep -Seconds 10
|
||||
Restart-Computer -Force
|
||||
} else {
|
||||
Write-Warning "`nPlease restart your computer manually for full restoration.`n"
|
||||
}
|
422
blackscreenoverlay.ps1
Normal file
422
blackscreenoverlay.ps1
Normal file
@@ -0,0 +1,422 @@
|
||||
#Requires -RunAsAdministrator
|
||||
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Installs black screen overlay to hide Windows logon animations.
|
||||
|
||||
.DESCRIPTION
|
||||
Creates and installs a fullscreen black overlay that covers the logon UI
|
||||
animations, combined with registry tweaks for maximum suppression.
|
||||
The overlay automatically dismisses when the desktop shell loads.
|
||||
|
||||
.NOTES
|
||||
- Requires Administrator privileges
|
||||
- Creates overlay executable and scheduled task
|
||||
- Combines with registry animation suppression
|
||||
- Completely safe - no system file modifications
|
||||
#>
|
||||
|
||||
function Write-Success { param($msg) Write-Host $msg -ForegroundColor Green }
|
||||
function Write-Info { param($msg) Write-Host $msg -ForegroundColor Cyan }
|
||||
function Write-Warning { param($msg) Write-Host $msg -ForegroundColor Yellow }
|
||||
function Write-Failure { param($msg) Write-Host $msg -ForegroundColor Red }
|
||||
|
||||
Write-Info "`n=== BLACK SCREEN OVERLAY INSTALLER ===`n"
|
||||
|
||||
# Check for admin rights
|
||||
if (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
|
||||
Write-Failure "This script requires Administrator privileges!"
|
||||
exit 1
|
||||
}
|
||||
|
||||
$installPath = "$env:ProgramData\LogonOverlay"
|
||||
$exePath = "$installPath\LogonOverlay.exe"
|
||||
$csPath = "$installPath\LogonOverlay.cs"
|
||||
|
||||
# Create installation directory
|
||||
Write-Info "[1] Creating installation directory..."
|
||||
if (-not (Test-Path $installPath)) {
|
||||
New-Item -Path $installPath -ItemType Directory -Force | Out-Null
|
||||
}
|
||||
Write-Success " [✓] Directory: $installPath"
|
||||
|
||||
# Create the C# overlay program source
|
||||
Write-Info "`n[2] Creating black screen overlay program..."
|
||||
|
||||
$csharpCode = @'
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Windows.Forms;
|
||||
using System.Drawing;
|
||||
using System.Diagnostics;
|
||||
using System.Threading;
|
||||
using System.Linq;
|
||||
|
||||
namespace LogonOverlay
|
||||
{
|
||||
public class OverlayForm : Form
|
||||
{
|
||||
[DllImport("user32.dll")]
|
||||
private static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);
|
||||
|
||||
[DllImport("user32.dll")]
|
||||
private static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
|
||||
|
||||
[DllImport("user32.dll")]
|
||||
private static extern int GetWindowLong(IntPtr hWnd, int nIndex);
|
||||
|
||||
private static readonly IntPtr HWND_TOPMOST = new IntPtr(-1);
|
||||
private const uint SWP_NOSIZE = 0x0001;
|
||||
private const uint SWP_NOMOVE = 0x0002;
|
||||
private const uint SWP_SHOWWINDOW = 0x0040;
|
||||
private const int GWL_EXSTYLE = -20;
|
||||
private const int WS_EX_TOOLWINDOW = 0x00000080;
|
||||
private const int WS_EX_NOACTIVATE = 0x08000000;
|
||||
|
||||
private System.Windows.Forms.Timer checkTimer;
|
||||
private DateTime startTime;
|
||||
|
||||
public OverlayForm()
|
||||
{
|
||||
// Set up form properties
|
||||
this.FormBorderStyle = FormBorderStyle.None;
|
||||
this.WindowState = FormWindowState.Maximized;
|
||||
this.BackColor = Color.Black;
|
||||
this.TopMost = true;
|
||||
this.ShowInTaskbar = false;
|
||||
this.StartPosition = FormStartPosition.Manual;
|
||||
|
||||
// Calculate bounds to cover ALL screens (handles both horizontal and vertical layouts)
|
||||
Rectangle totalBounds = Screen.AllScreens
|
||||
.Select(s => s.Bounds)
|
||||
.Aggregate((current, next) => Rectangle.Union(current, next));
|
||||
|
||||
this.Location = new Point(totalBounds.X, totalBounds.Y);
|
||||
this.Size = new Size(totalBounds.Width, totalBounds.Height);
|
||||
|
||||
startTime = DateTime.Now;
|
||||
}
|
||||
|
||||
protected override void OnShown(EventArgs e)
|
||||
{
|
||||
base.OnShown(e);
|
||||
|
||||
// Set extended window styles to keep it on top and prevent activation
|
||||
int exStyle = GetWindowLong(this.Handle, GWL_EXSTYLE);
|
||||
SetWindowLong(this.Handle, GWL_EXSTYLE, exStyle | WS_EX_TOOLWINDOW | WS_EX_NOACTIVATE);
|
||||
|
||||
// Force topmost
|
||||
SetWindowPos(this.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
|
||||
|
||||
// Start monitoring for explorer.exe
|
||||
checkTimer = new System.Windows.Forms.Timer();
|
||||
checkTimer.Interval = 100; // Check every 100ms
|
||||
checkTimer.Tick += CheckForExplorer;
|
||||
checkTimer.Start();
|
||||
}
|
||||
|
||||
private void CheckForExplorer(object sender, EventArgs e)
|
||||
{
|
||||
// Check if explorer.exe is running
|
||||
Process[] explorerProcesses = Process.GetProcessesByName("explorer");
|
||||
|
||||
// Also check for timeout (max 10 seconds)
|
||||
TimeSpan elapsed = DateTime.Now - startTime;
|
||||
|
||||
if (explorerProcesses.Length > 0 || elapsed.TotalSeconds > 10)
|
||||
{
|
||||
// Give explorer more time to fully render (1000ms for slower systems)
|
||||
Thread.Sleep(1000);
|
||||
|
||||
checkTimer.Stop();
|
||||
this.Close();
|
||||
Application.Exit();
|
||||
}
|
||||
}
|
||||
|
||||
protected override CreateParams CreateParams
|
||||
{
|
||||
get
|
||||
{
|
||||
CreateParams cp = base.CreateParams;
|
||||
cp.ExStyle |= WS_EX_TOOLWINDOW | WS_EX_NOACTIVATE;
|
||||
return cp;
|
||||
}
|
||||
}
|
||||
|
||||
protected override bool ShowWithoutActivation
|
||||
{
|
||||
get { return true; }
|
||||
}
|
||||
}
|
||||
|
||||
static class Program
|
||||
{
|
||||
[STAThread]
|
||||
static void Main()
|
||||
{
|
||||
// Check if we're in the logon session
|
||||
// Only run if explorer.exe is NOT already running
|
||||
Process[] explorerProcesses = Process.GetProcessesByName("explorer");
|
||||
if (explorerProcesses.Length > 0)
|
||||
{
|
||||
// Explorer already running, don't show overlay
|
||||
return;
|
||||
}
|
||||
|
||||
Application.EnableVisualStyles();
|
||||
Application.SetCompatibleTextRenderingDefault(false);
|
||||
Application.Run(new OverlayForm());
|
||||
}
|
||||
}
|
||||
}
|
||||
'@
|
||||
|
||||
# Save C# source file
|
||||
$csharpCode | Out-File -FilePath $csPath -Encoding UTF8 -Force
|
||||
|
||||
# Find csc.exe for better compilation control
|
||||
Write-Info " Locating C# compiler..."
|
||||
$cscPath = $null
|
||||
|
||||
# Try multiple .NET Framework versions
|
||||
$frameworkPaths = @(
|
||||
"${env:SystemRoot}\Microsoft.NET\Framework64\v4.0.30319\csc.exe",
|
||||
"${env:SystemRoot}\Microsoft.NET\Framework\v4.0.30319\csc.exe",
|
||||
"${env:SystemRoot}\Microsoft.NET\Framework64\v3.5\csc.exe",
|
||||
"${env:SystemRoot}\Microsoft.NET\Framework\v3.5\csc.exe"
|
||||
)
|
||||
|
||||
foreach ($path in $frameworkPaths) {
|
||||
if (Test-Path $path) {
|
||||
$cscPath = $path
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if ($cscPath) {
|
||||
Write-Success " [✓] Using csc.exe: $cscPath"
|
||||
Write-Info " Compiling overlay executable..."
|
||||
|
||||
# Compile with csc.exe for better error handling
|
||||
$compileArgs = @(
|
||||
"/target:winexe",
|
||||
"/out:$exePath",
|
||||
"/reference:System.Windows.Forms.dll",
|
||||
"/reference:System.Drawing.dll",
|
||||
"/reference:System.Core.dll",
|
||||
"/reference:System.Linq.dll",
|
||||
"/nologo",
|
||||
"/optimize+",
|
||||
$csPath
|
||||
)
|
||||
|
||||
$compileOutput = & $cscPath $compileArgs 2>&1
|
||||
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
Write-Failure " [✗] Compilation failed:"
|
||||
Write-Host $compileOutput -ForegroundColor Red
|
||||
exit 1
|
||||
}
|
||||
|
||||
Write-Success " [✓] Compilation successful using csc.exe"
|
||||
} else {
|
||||
# Fallback to Add-Type
|
||||
Write-Warning " [!] csc.exe not found, using Add-Type fallback"
|
||||
Write-Info " Compiling overlay executable..."
|
||||
|
||||
try {
|
||||
Add-Type -TypeDefinition $csharpCode -ReferencedAssemblies @(
|
||||
'System.Windows.Forms',
|
||||
'System.Drawing',
|
||||
'System.Core',
|
||||
'System.Linq'
|
||||
) -OutputAssembly $exePath -OutputType WindowsApplication -ErrorAction Stop
|
||||
|
||||
Write-Success " [✓] Compilation successful using Add-Type"
|
||||
} catch {
|
||||
Write-Failure " [✗] Failed to compile overlay program: $($_.Exception.Message)"
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
|
||||
if (-not (Test-Path $exePath)) {
|
||||
Write-Failure " [✗] Executable was not created!"
|
||||
exit 1
|
||||
}
|
||||
|
||||
Write-Success " [✓] Overlay program created: $exePath"
|
||||
|
||||
# Set file permissions (only SYSTEM and Admins)
|
||||
Write-Info "`n[3] Setting security permissions..."
|
||||
try {
|
||||
$acl = Get-Acl $exePath
|
||||
$acl.SetAccessRuleProtection($true, $false)
|
||||
|
||||
$adminRule = New-Object System.Security.AccessControl.FileSystemAccessRule(
|
||||
"BUILTIN\Administrators", "FullControl", "Allow"
|
||||
)
|
||||
$systemRule = New-Object System.Security.AccessControl.FileSystemAccessRule(
|
||||
"NT AUTHORITY\SYSTEM", "FullControl", "Allow"
|
||||
)
|
||||
|
||||
$acl.SetAccessRule($adminRule)
|
||||
$acl.SetAccessRule($systemRule)
|
||||
Set-Acl $exePath $acl
|
||||
|
||||
Write-Success " [✓] Security permissions configured"
|
||||
} catch {
|
||||
Write-Warning " [!] Could not set permissions: $($_.Exception.Message)"
|
||||
}
|
||||
|
||||
# Create scheduled task to run at system startup (before logon)
|
||||
Write-Info "`n[4] Creating scheduled task..."
|
||||
|
||||
$taskName = "LogonOverlayBlackScreen"
|
||||
$taskPath = "\Microsoft\Windows\Shell\"
|
||||
|
||||
# Remove existing task if present
|
||||
$existingTask = Get-ScheduledTask -TaskName $taskName -TaskPath $taskPath -ErrorAction SilentlyContinue
|
||||
if ($existingTask) {
|
||||
Unregister-ScheduledTask -TaskName $taskName -TaskPath $taskPath -Confirm:$false
|
||||
}
|
||||
|
||||
try {
|
||||
# Create action
|
||||
$action = New-ScheduledTaskAction -Execute $exePath
|
||||
|
||||
# Create trigger - At system startup
|
||||
$trigger = New-ScheduledTaskTrigger -AtStartup
|
||||
|
||||
# Create principal - Run as SYSTEM with highest privileges
|
||||
$principal = New-ScheduledTaskPrincipal -UserId "NT AUTHORITY\SYSTEM" -LogonType ServiceAccount -RunLevel Highest
|
||||
|
||||
# Create settings - optimized for laptops and priority execution
|
||||
$settings = New-ScheduledTaskSettingsSet `
|
||||
-AllowStartIfOnBatteries `
|
||||
-DontStopIfGoingOnBatteries `
|
||||
-DontStopOnIdleEnd `
|
||||
-ExecutionTimeLimit (New-TimeSpan -Minutes 1) `
|
||||
-Priority 0 `
|
||||
-StartWhenAvailable `
|
||||
-RestartCount 3 `
|
||||
-RestartInterval (New-TimeSpan -Minutes 1)
|
||||
|
||||
# Register task
|
||||
Register-ScheduledTask `
|
||||
-TaskName $taskName `
|
||||
-TaskPath $taskPath `
|
||||
-Action $action `
|
||||
-Trigger $trigger `
|
||||
-Principal $principal `
|
||||
-Settings $settings `
|
||||
-Force | Out-Null
|
||||
|
||||
Write-Success " [✓] Scheduled task created: $taskPath$taskName"
|
||||
Write-Info " Priority: Highest (0)"
|
||||
Write-Info " Battery: Will run on battery power"
|
||||
Write-Info " Restart: Auto-restart on failure (3 attempts)"
|
||||
} catch {
|
||||
Write-Failure " [✗] Failed to create scheduled task: $($_.Exception.Message)"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Apply registry tweaks for maximum suppression
|
||||
Write-Info "`n[5] Applying registry animation suppression..."
|
||||
|
||||
function Set-RegValue {
|
||||
param($Path, $Name, $Value, $Type = "DWord")
|
||||
try {
|
||||
if (-not (Test-Path $Path)) { New-Item -Path $Path -Force | Out-Null }
|
||||
New-ItemProperty -Path $Path -Name $Name -Value $Value -PropertyType $Type -Force | Out-Null
|
||||
return $true
|
||||
} catch {
|
||||
return $false
|
||||
}
|
||||
}
|
||||
|
||||
# Core suppression keys
|
||||
$suppressionKeys = @(
|
||||
@{Path="HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System"; Name="EnableFirstLogonAnimation"; Value=0},
|
||||
@{Path="HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System"; Name="DisableAnimations"; Value=1},
|
||||
@{Path="HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI"; Name="AnimationDisabled"; Value=1},
|
||||
@{Path="HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI"; Name="EnableTransitions"; Value=0},
|
||||
@{Path="HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System"; Name="DisableStatusMessages"; Value=1},
|
||||
@{Path="HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"; Name="DelayedDesktopSwitchTimeout"; Value=0},
|
||||
@{Path="HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"; Name="AutoLogonDelay"; Value=0}
|
||||
)
|
||||
|
||||
$appliedCount = 0
|
||||
foreach ($key in $suppressionKeys) {
|
||||
if (Set-RegValue -Path $key.Path -Name $key.Name -Value $key.Value) {
|
||||
$appliedCount++
|
||||
}
|
||||
}
|
||||
|
||||
Write-Success " [✓] Applied $appliedCount registry tweaks"
|
||||
|
||||
# Summary
|
||||
Write-Info "`n" + "="*70
|
||||
Write-Success "`n✓ BLACK SCREEN OVERLAY INSTALLED SUCCESSFULLY!"
|
||||
Write-Info "="*70
|
||||
|
||||
Write-Host "`n📋 WHAT WAS INSTALLED:" -ForegroundColor Cyan
|
||||
Write-Host " ✓ C# source code: $csPath"
|
||||
Write-Host " ✓ Overlay executable: $exePath"
|
||||
Write-Host " ✓ Scheduled task: Runs at system startup (highest priority)"
|
||||
Write-Host " ✓ Registry tweaks: Core animation suppression applied"
|
||||
Write-Host " ✓ Security: SYSTEM-level execution with highest priority"
|
||||
|
||||
Write-Host "`n💡 HOW IT WORKS:" -ForegroundColor Green
|
||||
Write-Host " 1. At boot, black overlay launches before LogonUI"
|
||||
Write-Host " 2. Covers ALL screens with solid black window (multi-monitor aware)"
|
||||
Write-Host " 3. Uses Rectangle.Union for proper multi-monitor coverage"
|
||||
Write-Host " 4. Stays on top of all animations and UI elements"
|
||||
Write-Host " 5. Monitors for explorer.exe (desktop shell)"
|
||||
Write-Host " 6. Waits 1000ms after shell detected (slow system support)"
|
||||
Write-Host " 7. Dismisses itself gracefully"
|
||||
Write-Host " 8. Result: Completely black transition to desktop"
|
||||
|
||||
Write-Host "`n🎯 WHAT YOU'LL SEE:" -ForegroundColor Green
|
||||
Write-Host " • Windows logo during boot (normal)"
|
||||
Write-Host " • Solid black screen (instead of animations)"
|
||||
Write-Host " • Your desktop appears smoothly"
|
||||
Write-Host " • NO profile picture, username, spinning wheel, or status text"
|
||||
|
||||
Write-Host "`n🖥️ MULTI-MONITOR SUPPORT:" -ForegroundColor Green
|
||||
Write-Host " • Covers horizontal screen layouts"
|
||||
Write-Host " • Covers vertical screen layouts"
|
||||
Write-Host " • Covers mixed/irregular layouts"
|
||||
Write-Host " • Uses Rectangle.Union for proper bounds calculation"
|
||||
|
||||
Write-Warning "`n⚠️ IMPORTANT NOTES:"
|
||||
Write-Host " • Overlay has 10-second timeout (safety mechanism)"
|
||||
Write-Host " • 1000ms delay after explorer.exe for slow systems"
|
||||
Write-Host " • Auto-restart on failure (3 attempts)"
|
||||
Write-Host " • Works with auto-login and password-protected accounts"
|
||||
Write-Host " • Battery-friendly (runs on laptop battery)"
|
||||
Write-Host " • Restart required to see it in action"
|
||||
|
||||
Write-Success "`n✅ ADVANTAGES:"
|
||||
Write-Host " • Compiled with csc.exe for better compatibility"
|
||||
Write-Host " • Fallback to Add-Type if csc.exe unavailable"
|
||||
Write-Host " • No system file modifications"
|
||||
Write-Host " • No security compromises"
|
||||
Write-Host " • Update-proof (survives all Windows Updates)"
|
||||
Write-Host " • Fully reversible (use uninstall script)"
|
||||
Write-Host " • Zero performance impact"
|
||||
|
||||
Write-Info "`n📝 TO UNINSTALL:"
|
||||
Write-Host " Run the companion uninstall script to completely remove"
|
||||
Write-Host " all components and revert registry changes."
|
||||
|
||||
Write-Info "`n" + "="*70
|
||||
|
||||
$restart = Read-Host "`nRestart computer now to test? (Y/N)"
|
||||
if ($restart -eq 'Y') {
|
||||
Write-Info "Restarting in 10 seconds... (Ctrl+C to cancel)"
|
||||
Start-Sleep -Seconds 10
|
||||
Restart-Computer -Force
|
||||
} else {
|
||||
Write-Warning "`nRestart your computer to see the black screen overlay in action!`n"
|
||||
}
|
Binary file not shown.
Reference in New Issue
Block a user