diff --git a/.github/actions/spell-check/expect.txt b/.github/actions/spell-check/expect.txt
index a6987c170a..3ac98ffdad 100644
--- a/.github/actions/spell-check/expect.txt
+++ b/.github/actions/spell-check/expect.txt
@@ -527,6 +527,7 @@ enum
EOAC
eol
epicgames
+epo
Eqn
ERASEBKGND
EREOF
@@ -574,6 +575,7 @@ fallthrough
fancyzones
FANCYZONESDRAWLAYOUTTEST
FANCYZONESEDITOR
+FANCYZONESWINDOWSTYLES
Farbraum
Faroe
FARPROC
@@ -695,6 +697,7 @@ helptext
Heure
HEVC
hfile
+HFONT
hglobal
hhk
HHmmss
@@ -1309,6 +1312,7 @@ NCPAINT
NCRBUTTONDBLCLK
NCRBUTTONDOWN
NCRBUTTONUP
+NCRENDERING
NDEBUG
Ndombe
ndp
@@ -2254,6 +2258,8 @@ WINDOWSBUILDNUMBER
Windowscodecs
windowsdesktop
windowssearch
+WINDOWSTYLES
+WINDOWSTYLESICON
windowsx
windowwalker
winerror
diff --git a/.pipelines/ESRPSigning_core.json b/.pipelines/ESRPSigning_core.json
index 576f38511b..e8c370c09e 100644
--- a/.pipelines/ESRPSigning_core.json
+++ b/.pipelines/ESRPSigning_core.json
@@ -17,6 +17,7 @@
"PowerToys.Interop.dll",
"BugReportTool\\PowerToys.BugReportTool.exe",
"WebcamReportTool\\PowerToys.WebcamReportTool.exe",
+ "WindowStylesReportTool\\PowerToys.WindowStylesReportTool.exe",
"Telemetry.dll",
"PowerToys.ManagedTelemetry.dll",
"PowerToys.ManagedCommon.dll",
diff --git a/.pipelines/ci/templates/build-powertoys-steps.yml b/.pipelines/ci/templates/build-powertoys-steps.yml
index 1204b10401..b54c7a9fd8 100644
--- a/.pipelines/ci/templates/build-powertoys-steps.yml
+++ b/.pipelines/ci/templates/build-powertoys-steps.yml
@@ -76,6 +76,25 @@ steps:
msbuildArgs: ${{ parameters.additionalBuildArguments }}
maximumCpuCount: true
+- task: NuGetCommand@2
+ displayName: Restore NuGet packages for WindowStylesReportTool.sln
+ inputs:
+ command: restore
+ feedsToUse: config
+ configPath: NuGet.config
+ restoreSolution: tools\WindowStylesReportTool\WindowStylesReportTool.sln
+ restoreDirectory: '$(Build.SourcesDirectory)\tools\WindowStylesReportTool\packages'
+
+- task: VSBuild@1
+ displayName: 'Build WindowStylesReportTool.sln'
+ inputs:
+ solution: '**\WindowStylesReportTool.sln'
+ vsVersion: 17.0
+ platform: '$(BuildPlatform)'
+ configuration: '$(BuildConfiguration)'
+ msbuildArgs: ${{ parameters.additionalBuildArguments }}
+ maximumCpuCount: true
+
- task: NuGetCommand@2
displayName: Restore NuGet packages for PowerToysSetup.sln
inputs:
diff --git a/.pipelines/release.yml b/.pipelines/release.yml
index 2112bfd27a..5e7d2d5bc5 100644
--- a/.pipelines/release.yml
+++ b/.pipelines/release.yml
@@ -155,6 +155,17 @@ jobs:
clean: true
maximumCpuCount: true
+ - task: VSBuild@1
+ displayName: Build WindowStylesReportTool
+ inputs:
+ solution: '**/tools/WindowStylesReportTool/WindowStylesReportTool.sln'
+ vsVersion: 17.0
+ msbuildArgs: /p:CIBuild=true /bl:$(Build.SourcesDirectory)\msbuild.binlog
+ platform: $(BuildPlatform)
+ configuration: $(BuildConfiguration)
+ clean: true
+ maximumCpuCount: true
+
- task: VSBuild@1
displayName: Build PowerToysSetupCustomActions
inputs:
diff --git a/doc/devdocs/readme.md b/doc/devdocs/readme.md
index e06f9b6d65..c2f6459049 100644
--- a/doc/devdocs/readme.md
+++ b/doc/devdocs/readme.md
@@ -66,6 +66,7 @@ The installer can only be compiled in `Release` mode, step 1 and 2 must be done
1. Compile `PowerToys.sln`. Instructions are listed above.
2. Compile `BugReportTool.sln` tool. Path from root: `tools\BugReportTool\BugReportTool.sln` (details listed below)
3. Compile `WebcamReportTool.sln` tool. Path from root: `tools\WebcamReportTool\WebcamReportTool.sln` (details listed below)
+3. Compile `WindowStylesReportTool.sln` tool. Path from root: `tools\WindowStylesReportTool\WindowStylesReportTool.sln` (details listed below)
4. Compile `PowerToysSetup.sln` Path from root: `installer\PowerToysSetup.sln` (details listed below)
### Prerequisites for building the MSI installer
@@ -85,6 +86,12 @@ The installer can only be compiled in `Release` mode, step 1 and 2 must be done
2. In Visual Studio, in the `Solutions Configuration` drop-down menu select `Release`
3. From the `Build` menu, choose `Build Solution`.
+### Locally compiling the Window styles reporting tool
+
+1. Open `tools\WindowStylesReportTool\WindowStylesReportTool.sln`
+2. In Visual Studio, in the `Solutions Configuration` drop-down menu select `Release`
+3. From the `Build` menu, choose `Build Solution`.
+
### Locally compiling the installer
1. Open `installer\PowerToysSetup.sln`
diff --git a/installer/PowerToysSetup/Product.wxs b/installer/PowerToysSetup/Product.wxs
index 62fbcb8f3d..f52eb502fc 100644
--- a/installer/PowerToysSetup/Product.wxs
+++ b/installer/PowerToysSetup/Product.wxs
@@ -616,6 +616,9 @@
+
+
+
@@ -1049,6 +1052,7 @@
+
diff --git a/tools/WindowStylesReportTool/Resource.h b/tools/WindowStylesReportTool/Resource.h
new file mode 100644
index 0000000000..3753dba0ce
--- /dev/null
+++ b/tools/WindowStylesReportTool/Resource.h
@@ -0,0 +1,24 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by WindowStylesReportTool.rc
+
+#define IDR_MAINFRAME 128
+#define IDD_ABOUTBOX 103
+#define IDI_WINDOWSTYLESICON 107
+#define IDI_SMALLICON 108
+#define IDC_WINDOWSTYLES 109
+#ifndef IDC_STATIC
+#define IDC_STATIC -1
+#endif
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+
+#define _APS_NO_MFC 130
+#define _APS_NEXT_RESOURCE_VALUE 129
+#define _APS_NEXT_COMMAND_VALUE 32771
+#define _APS_NEXT_CONTROL_VALUE 1000
+#define _APS_NEXT_SYMED_VALUE 110
+#endif
+#endif
diff --git a/tools/WindowStylesReportTool/WindowStylesReportTool.cpp b/tools/WindowStylesReportTool/WindowStylesReportTool.cpp
new file mode 100644
index 0000000000..3391567cbb
--- /dev/null
+++ b/tools/WindowStylesReportTool/WindowStylesReportTool.cpp
@@ -0,0 +1,424 @@
+#include "pch.h"
+#include "WindowStylesReportTool.h"
+
+#include
+#include
+
+#include
+#include
+#include