Lets try to automate the auto-theme change in windows using dll's
Why you ask?
Well nothing much, I just need an excuse to learn and know how and where dll's can be used in windows
So starting we do the most basic stuff which is solve our daily issues.
One of my such issues is I want light windows theme during day time and dark theme in night time, so I am trying to automate this process.
Lets get started, shall we...
@echo off
setlocal enabledelayedexpansion
@echo off
: This command disables command echoing, which prevents the console from displaying the actual commands. To make the output of batch scripts cleaner, it is frequently used at the start of the script.setlocal enabledelayedexpansion
: This command enables delayed variable expansion. It's necessary when using variables inside a block of code (inside parentheses), as it allows you to access the updated values of variables within the block. In this script, it's used within thefor
loop to update thecurrent_hour
variable.
rem Get the current time in hours (24-hour format)
for /f "tokens=1,2 delims=:" %%a in ("%time%") do (
set /a "current_hour=%%a"
)
rem
: This is a comment or remark. It's used to insert comments into the batch script that describe what a certain piece of code accomplishes. It serves as a sign that we are receiving the current time in this instance.for /f "tokens=1,2 delims=:" %%a in ("%time%") do ...
: Thisfor
loop is used to split the current time (in the format HH:MM:SS.ss) and extract the hour (HH) part. It uses:
as the delimiter, and thetokens=1,2
option specifies which parts of the string to capture.set /a "current_hour=%%a"
: This line assigns the extracted hour to thecurrent_hour
variable. The/a
option tells theset
command to treat the right-hand side as an arithmetic expression.
rem Set the time ranges for theme changes
set morning_start=6
set morning_end=11
set afternoon_start=12
set afternoon_end=17
set evening_start=18
set evening_end=23
- Here, we define time ranges for when different themes should be applied. The script considers the morning (6 AM - 11 AM), afternoon (12 PM - 5 PM), and evening (6 PM - 11 PM) periods. These time ranges are stored in variables like
morning_start
,morning_end
, etc.
rem Choose the theme based on the current time
if !current_hour! geq %morning_start% if !current_hour! leq %morning_end% (
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize" /v AppsUseLightTheme /t REG_DWORD /d 1 /f
) else if !current_hour! geq %afternoon_start% if !current_hour! leq %afternoon_end% (
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize" /v AppsUseLightTheme /t REG_DWORD /d 1 /f
) else if !current_hour! geq %evening_start% if !current_hour! leq %evening_end% (
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize" /v AppsUseLightTheme /t REG_DWORD /d 0 /f
)
Here, the script checks the
current_hour
against the defined time ranges for the different parts of the day. If the current hour falls within a specified range, it uses thereg
command to change the Windows theme settings.The
reg add
command modifies the Windows Registry. In this example, it sets the "AppsUseLightTheme" value under the "Personalize" key to 1 (for light theme) during the morning and afternoon, and 0 (for dark theme) in the evening. The/t REG_DWORD
option specifies the data type as a DWORD.
rem Trigger a theme change
rundll32.exe %SystemRoot%\System32\shell32.dll,Control_RunDLL %SystemRoot%\System32\desk.cpl desk,@Themes /Action:OpenTheme /file:"Path\To\Your\Theme"
- Finally, the script uses
rundll32.exe
to open the Windows theme control panel. This line of code triggers a theme change based on the specified theme file path. Be sure to replace"Path\To\Your\Theme"
with the actual path to the theme file you want to apply.
This batch script, which can be manually run or scheduled to run at predetermined periods, automates the process of changing the Windows theme dependent on the time of day.
Top comments (0)