diff --git a/Cpp.Build.props b/Cpp.Build.props
index 5a4538f940..99738fd0dc 100644
--- a/Cpp.Build.props
+++ b/Cpp.Build.props
@@ -1,6 +1,56 @@
+
+
+ $(Configuration)
+
+
+
+
+
+
+
+
+
+
+ MultiThreadedDebug
+
+
+
+ %(IgnoreSpecificDefaultLibraries);libucrtd.lib
+ %(AdditionalOptions) /defaultlib:ucrtd.lib
+
+
+
+
+
+ MultiThreaded
+
+
+
+ %(IgnoreSpecificDefaultLibraries);libucrt.lib
+ %(AdditionalOptions) /defaultlib:ucrt.lib
+
+
+
+
+
+
+ MultiThreadedDebugDLL
+
+
+
+
+ MultiThreadedDLL
+
+
@@ -73,7 +123,6 @@
_DEBUG;%(PreprocessorDefinitions)
Disabled
- MultiThreadedDebug
true
@@ -83,7 +132,6 @@
NDEBUG;%(PreprocessorDefinitions)
MaxSpeed
- MultiThreaded
true
true
diff --git a/README.md b/README.md
index 85fad26e1f..e737281523 100644
--- a/README.md
+++ b/README.md
@@ -48,7 +48,7 @@ Before you begin, make sure your device meets the system requirements:
Choose one of the installation methods below:
-
+
Download .exe from GitHub
Go to the [PowerToys GitHub releases][github-release-link], click Assets to reveal the downloads, and choose the installer that matches your architecture and install scope. For most devices, that's the x64 per-user installer.
@@ -56,17 +56,17 @@ Go to the [PowerToys GitHub releases][github-release-link], click Assets to reve
[github-next-release-work]: https://github.com/microsoft/PowerToys/issues?q=is%3Aissue+milestone%3A%22PowerToys+0.96%22
[github-current-release-work]: https://github.com/microsoft/PowerToys/issues?q=is%3Aissue+milestone%3A%22PowerToys+0.95%22
-[ptUserX64]: https://github.com/microsoft/PowerToys/releases/download/v0.95.0/PowerToysUserSetup-0.95.0-x64.exe
-[ptUserArm64]: https://github.com/microsoft/PowerToys/releases/download/v0.95.0/PowerToysUserSetup-0.95.0-arm64.exe
-[ptMachineX64]: https://github.com/microsoft/PowerToys/releases/download/v0.95.0/PowerToysSetup-0.95.0-x64.exe
-[ptMachineArm64]: https://github.com/microsoft/PowerToys/releases/download/v0.95.0/PowerToysSetup-0.95.0-arm64.exe
+[ptUserX64]: https://github.com/microsoft/PowerToys/releases/download/v0.95.1/PowerToysUserSetup-0.95.1-x64.exe
+[ptUserArm64]: https://github.com/microsoft/PowerToys/releases/download/v0.95.1/PowerToysUserSetup-0.95.1-arm64.exe
+[ptMachineX64]: https://github.com/microsoft/PowerToys/releases/download/v0.95.1/PowerToysSetup-0.95.1-x64.exe
+[ptMachineArm64]: https://github.com/microsoft/PowerToys/releases/download/v0.95.1/PowerToysSetup-0.95.1-arm64.exe
| Description | Filename |
|----------------|----------|
-| Per user - x64 | [PowerToysUserSetup-0.95.0-x64.exe][ptUserX64] |
-| Per user - ARM64 | [PowerToysUserSetup-0.95.0-arm64.exe][ptUserArm64] |
-| Machine wide - x64 | [PowerToysSetup-0.95.0-x64.exe][ptMachineX64] |
-| Machine wide - ARM64 | [PowerToysSetup-0.95.0-arm64.exe][ptMachineArm64] |
+| Per user - x64 | [PowerToysUserSetup-0.95.1-x64.exe][ptUserX64] |
+| Per user - ARM64 | [PowerToysUserSetup-0.95.1-arm64.exe][ptUserArm64] |
+| Machine wide - x64 | [PowerToysSetup-0.95.1-x64.exe][ptMachineX64] |
+| Machine wide - ARM64 | [PowerToysSetup-0.95.1-arm64.exe][ptMachineArm64] |
@@ -281,4 +281,4 @@ The application logs basic diagnostic data (telemetry). For more privacy informa
[roadmap]: https://github.com/microsoft/PowerToys/wiki/Roadmap
[privacy-link]: http://go.microsoft.com/fwlink/?LinkId=521839
[loc-bug]: https://github.com/microsoft/PowerToys/issues/new?assignees=&labels=&template=translation_issue.md&title=
-[usingPowerToys-docs-link]: https://aka.ms/powertoys-docs
\ No newline at end of file
+[usingPowerToys-docs-link]: https://aka.ms/powertoys-docs
diff --git a/installer/PowerToysSetupCustomActionsVNext/PowerToysSetupCustomActionsVNext.vcxproj b/installer/PowerToysSetupCustomActionsVNext/PowerToysSetupCustomActionsVNext.vcxproj
index 14f4c05d47..71d7b97fed 100644
--- a/installer/PowerToysSetupCustomActionsVNext/PowerToysSetupCustomActionsVNext.vcxproj
+++ b/installer/PowerToysSetupCustomActionsVNext/PowerToysSetupCustomActionsVNext.vcxproj
@@ -109,7 +109,6 @@
Disabled
_DEBUG;_WINDOWS;_USRDLL;CUSTOMACTIONTEST_EXPORTS;%(PreprocessorDefinitions)
EnableFastChecks
- MultiThreadedDebug
true
@@ -122,7 +121,6 @@
MaxSpeed
true
NDEBUG;_WINDOWS;_USRDLL;CUSTOMACTIONTEST_EXPORTS;%(PreprocessorDefinitions)
- MultiThreaded
true
@@ -175,4 +173,4 @@
-
\ No newline at end of file
+
diff --git a/installer/PowerToysSetupVNext/Directory.Build.props b/installer/PowerToysSetupVNext/Directory.Build.props
index 505e3cf844..69a63832d1 100644
--- a/installer/PowerToysSetupVNext/Directory.Build.props
+++ b/installer/PowerToysSetupVNext/Directory.Build.props
@@ -1,4 +1,5 @@
+
@@ -8,4 +9,4 @@
$(BaseIntermediateOutputPath)
-
+
\ No newline at end of file
diff --git a/installer/PowerToysSetupVNext/SilentFilesInUseBA/SilentFilesInUseBAFunction.vcxproj b/installer/PowerToysSetupVNext/SilentFilesInUseBA/SilentFilesInUseBAFunction.vcxproj
index 3972c1b0f7..d45e32f87c 100644
--- a/installer/PowerToysSetupVNext/SilentFilesInUseBA/SilentFilesInUseBAFunction.vcxproj
+++ b/installer/PowerToysSetupVNext/SilentFilesInUseBA/SilentFilesInUseBAFunction.vcxproj
@@ -1,30 +1,7 @@
-
-
-
-
- Debug
- ARM64
-
-
- Release
- ARM64
-
-
- Debug
- x64
-
-
- Release
- x64
-
-
-
{F8B9F842-F5C3-4A2D-8C85-7F8B9E2B4F1D}
- DynamicLibrary
- Unicode
SilentFilesInUseBAFunction
PowerToysSetupCustomActionsVNext
bafunctions.def
@@ -33,7 +10,6 @@
-
DynamicLibrary
true
@@ -65,7 +41,10 @@
-
+
+ Use
+ precomp.h
+
Create
precomp.h
@@ -92,31 +71,5 @@
-
-
-
- _DEBUG;%(PreprocessorDefinitions)
- Disabled
- MultiThreadedDebug
-
-
- true
-
-
-
-
- NDEBUG;%(PreprocessorDefinitions)
- MaxSpeed
- MultiThreaded
- true
- true
-
-
- true
- true
- true
-
-
-
diff --git a/installer/PowerToysSetupVNext/SilentFilesInUseBA/SilentFilesInUseBAFunctions.cpp b/installer/PowerToysSetupVNext/SilentFilesInUseBA/SilentFilesInUseBAFunctions.cpp
index 9b9e5d570f..ceccde5f0d 100644
--- a/installer/PowerToysSetupVNext/SilentFilesInUseBA/SilentFilesInUseBAFunctions.cpp
+++ b/installer/PowerToysSetupVNext/SilentFilesInUseBA/SilentFilesInUseBAFunctions.cpp
@@ -18,7 +18,6 @@ public: // IBootstrapperApplication
BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "*** CUSTOM BA FUNCTION SYSTEM ACTIVE *** Running detect begin BA function. fCached=%d, registrationType=%d, cPackages=%u, fCancel=%d", fCached, registrationType, cPackages, *pfCancel);
- LExit:
return hr;
}
@@ -32,12 +31,6 @@ public: // IBAFunctions
BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "*** CUSTOM BA FUNCTION SYSTEM ACTIVE *** Running plan begin BA function. cPackages=%u, fCancel=%d", cPackages, *pfCancel);
- //-------------------------------------------------------------------------------------------------
- // YOUR CODE GOES HERE
- // BalExitOnFailure(hr, "Change this message to represent real error handling.");
- //-------------------------------------------------------------------------------------------------
-
- LExit:
return hr;
}
@@ -63,6 +56,7 @@ public: // IBAFunctions
)
{
HRESULT hr = S_OK;
+ UNREFERENCED_PARAMETER(source);
BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "*** CUSTOM BA FUNCTION CALLED *** Running OnExecuteFilesInUse BA function. packageId=%ls, cFiles=%u, recommendation=%d", wzPackageId, cFiles, nRecommendation);
diff --git a/src/common/CalculatorEngineCommon/CalculatorEngineCommon.vcxproj b/src/common/CalculatorEngineCommon/CalculatorEngineCommon.vcxproj
index 43f4749892..ff9332cfc0 100644
--- a/src/common/CalculatorEngineCommon/CalculatorEngineCommon.vcxproj
+++ b/src/common/CalculatorEngineCommon/CalculatorEngineCommon.vcxproj
@@ -9,12 +9,6 @@
CalculatorEngineCommon
false
-
-
- true
- false
-
-
true
@@ -25,11 +19,9 @@
true
- true
+ false
true
Windows Store
- false
-
@@ -148,43 +140,5 @@
-
-
-
-
-
-
- MultiThreadedDebug
- stdcpp17
-
-
-
- %(IgnoreSpecificDefaultLibraries);libucrtd.lib
- %(AdditionalOptions) /defaultlib:ucrtd.lib
-
-
-
-
-
- MultiThreaded
-
-
-
- %(IgnoreSpecificDefaultLibraries);libucrt.lib
- %(AdditionalOptions) /defaultlib:ucrt.lib
-
-
-
+
\ No newline at end of file
diff --git a/src/common/interop/PowerToys.Interop.vcxproj b/src/common/interop/PowerToys.Interop.vcxproj
index ca29e69cce..472119925e 100644
--- a/src/common/interop/PowerToys.Interop.vcxproj
+++ b/src/common/interop/PowerToys.Interop.vcxproj
@@ -63,14 +63,12 @@
- MultiThreadedDebug
true
true
- MultiThreaded
false
true
false
diff --git a/src/common/notifications/BackgroundActivator/BackgroundActivator.vcxproj b/src/common/notifications/BackgroundActivator/BackgroundActivator.vcxproj
index 077333a664..b2ebc7cb72 100644
--- a/src/common/notifications/BackgroundActivator/BackgroundActivator.vcxproj
+++ b/src/common/notifications/BackgroundActivator/BackgroundActivator.vcxproj
@@ -46,16 +46,6 @@
notifications
-
-
- MultiThreadedDebugDLL
-
-
-
-
- MultiThreadedDLL
-
-
$(IntDir)pch.pch
diff --git a/src/modules/CropAndLock/CropAndLock/CropAndLock.vcxproj b/src/modules/CropAndLock/CropAndLock/CropAndLock.vcxproj
index c3e9e4f3f1..71b535c629 100644
--- a/src/modules/CropAndLock/CropAndLock/CropAndLock.vcxproj
+++ b/src/modules/CropAndLock/CropAndLock/CropAndLock.vcxproj
@@ -82,8 +82,6 @@
Disabled
_DEBUG;%(PreprocessorDefinitions)
- MultiThreadedDebug
- MultiThreadedDebug
false
@@ -95,8 +93,6 @@
true
true
NDEBUG;%(PreprocessorDefinitions)
- MultiThreaded
- MultiThreaded
true
diff --git a/src/modules/FileLocksmith/FileLocksmithLibInterop/FileLocksmithLibInterop.vcxproj b/src/modules/FileLocksmith/FileLocksmithLibInterop/FileLocksmithLibInterop.vcxproj
index c4489cdad8..184eec3342 100644
--- a/src/modules/FileLocksmith/FileLocksmithLibInterop/FileLocksmithLibInterop.vcxproj
+++ b/src/modules/FileLocksmith/FileLocksmithLibInterop/FileLocksmithLibInterop.vcxproj
@@ -39,7 +39,6 @@
_DEBUG;%(PreprocessorDefinitions)
- MultiThreadedDebugDLL
true
true
@@ -49,7 +48,6 @@
NDEBUG;%(PreprocessorDefinitions)
true
true
- MultiThreadedDLL
false
true
false
diff --git a/src/modules/LightSwitch/LightSwitchService/LightSwitchService.cpp b/src/modules/LightSwitch/LightSwitchService/LightSwitchService.cpp
index 69fe38248f..7ebe4a67eb 100644
--- a/src/modules/LightSwitch/LightSwitchService/LightSwitchService.cpp
+++ b/src/modules/LightSwitch/LightSwitchService/LightSwitchService.cpp
@@ -16,6 +16,8 @@ SERVICE_STATUS g_ServiceStatus = {};
SERVICE_STATUS_HANDLE g_StatusHandle = nullptr;
HANDLE g_ServiceStopEvent = nullptr;
static int g_lastUpdatedDay = -1;
+static ScheduleMode prevMode = ScheduleMode::Off;
+static std::wstring prevLat, prevLon;
VOID WINAPI ServiceMain(DWORD argc, LPTSTR* argv);
VOID WINAPI ServiceCtrlHandler(DWORD dwCtrl);
@@ -185,20 +187,28 @@ DWORD WINAPI ServiceWorkerThread(LPVOID lpParam)
if (isLightActive)
{
if (settings.changeSystem && !isSystemCurrentlyLight)
+ {
SetSystemTheme(true);
Logger::info(L"[LightSwitchService] Changing system theme to light mode.");
+ }
if (settings.changeApps && !isAppsCurrentlyLight)
+ {
SetAppsTheme(true);
Logger::info(L"[LightSwitchService] Changing apps theme to light mode.");
+ }
}
else
{
if (settings.changeSystem && isSystemCurrentlyLight)
+ {
SetSystemTheme(false);
Logger::info(L"[LightSwitchService] Changing system theme to dark mode.");
+ }
if (settings.changeApps && isAppsCurrentlyLight)
+ {
SetAppsTheme(false);
- Logger::info(L"[LightSwitchService] Changing apps theme to light mode.");
+ Logger::info(L"[LightSwitchService] Changing apps theme to dark mode.");
+ }
}
};
@@ -228,6 +238,23 @@ DWORD WINAPI ServiceWorkerThread(LPVOID lpParam)
LightSwitchSettings::instance().LoadSettings();
const auto& settings = LightSwitchSettings::instance().settings();
+ // Check for changes in schedule mode or coordinates
+ bool modeChangedToSunset = (prevMode != settings.scheduleMode &&
+ settings.scheduleMode == ScheduleMode::SunsetToSunrise);
+ bool coordsChanged = (prevLat != settings.latitude || prevLon != settings.longitude);
+
+ if ((modeChangedToSunset || coordsChanged) && settings.scheduleMode == ScheduleMode::SunsetToSunrise)
+ {
+ Logger::info(L"[LightSwitchService] Mode or coordinates changed, recalculating sun times.");
+ update_sun_times(settings);
+ SYSTEMTIME st;
+ GetLocalTime(&st);
+ g_lastUpdatedDay = st.wDay;
+ prevMode = settings.scheduleMode;
+ prevLat = settings.latitude;
+ prevLon = settings.longitude;
+ }
+
// If schedule is off, idle but keep watching settings and manual override
if (settings.scheduleMode == ScheduleMode::Off)
{
diff --git a/src/modules/MouseUtils/FindMyMouse/FindMyMouse.cpp b/src/modules/MouseUtils/FindMyMouse/FindMyMouse.cpp
index adf5075837..c94c79e178 100644
--- a/src/modules/MouseUtils/FindMyMouse/FindMyMouse.cpp
+++ b/src/modules/MouseUtils/FindMyMouse/FindMyMouse.cpp
@@ -269,6 +269,10 @@ LRESULT SuperSonar::BaseWndProc(UINT message, WPARAM wParam, LPARAM lParam) n
case WM_NCHITTEST:
return HTTRANSPARENT;
+
+ case WM_SETCURSOR:
+ SetCursor(LoadCursor(nullptr, IDC_ARROW));
+ return TRUE;
}
if (message == WM_PRIV_SHORTCUT)
@@ -535,7 +539,7 @@ void SuperSonar::StartSonar()
Trace::MousePointerFocused();
// Cover the entire virtual screen.
// HACK: Draw with 1 pixel off. Otherwise, Windows glitches the task bar transparency when a transparent window fill the whole screen.
- SetWindowPos(m_hwnd, HWND_TOPMOST, GetSystemMetrics(SM_XVIRTUALSCREEN) + 1, GetSystemMetrics(SM_YVIRTUALSCREEN) + 1, GetSystemMetrics(SM_CXVIRTUALSCREEN) - 2, GetSystemMetrics(SM_CYVIRTUALSCREEN) - 2, 0);
+ SetWindowPos(m_hwnd, HWND_TOPMOST, GetSystemMetrics(SM_XVIRTUALSCREEN) + 1, GetSystemMetrics(SM_YVIRTUALSCREEN) + 1, GetSystemMetrics(SM_CXVIRTUALSCREEN) - 2, GetSystemMetrics(SM_CYVIRTUALSCREEN) - 2, SWP_NOACTIVATE);
m_sonarPos = ptNowhere;
OnMouseTimer();
UpdateMouseSnooping();
diff --git a/src/modules/MouseUtils/FindMyMouse/FindMyMouse.vcxproj b/src/modules/MouseUtils/FindMyMouse/FindMyMouse.vcxproj
index d127de245e..0f444134ec 100644
--- a/src/modules/MouseUtils/FindMyMouse/FindMyMouse.vcxproj
+++ b/src/modules/MouseUtils/FindMyMouse/FindMyMouse.vcxproj
@@ -64,7 +64,6 @@
true
_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
true
- MultiThreadedDebug
stdcpplatest
@@ -82,7 +81,6 @@
true
NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
true
- MultiThreaded
stdcpplatest
diff --git a/src/modules/MouseUtils/MouseHighlighter/MouseHighlighter.vcxproj b/src/modules/MouseUtils/MouseHighlighter/MouseHighlighter.vcxproj
index df0df021da..ecd6ea3ec4 100644
--- a/src/modules/MouseUtils/MouseHighlighter/MouseHighlighter.vcxproj
+++ b/src/modules/MouseUtils/MouseHighlighter/MouseHighlighter.vcxproj
@@ -48,7 +48,6 @@
true
_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
true
- MultiThreadedDebug
stdcpplatest
@@ -66,7 +65,6 @@
true
NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
true
- MultiThreaded
stdcpplatest
diff --git a/src/modules/MouseUtils/MouseJump/MouseJump.vcxproj b/src/modules/MouseUtils/MouseJump/MouseJump.vcxproj
index 29e8f444bf..89abed873a 100644
--- a/src/modules/MouseUtils/MouseJump/MouseJump.vcxproj
+++ b/src/modules/MouseUtils/MouseJump/MouseJump.vcxproj
@@ -48,7 +48,6 @@
true
_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
true
- MultiThreadedDebug
stdcpplatest
@@ -66,7 +65,6 @@
true
NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
true
- MultiThreaded
stdcpplatest
diff --git a/src/modules/MouseUtils/MousePointerCrosshairs/MousePointerCrosshairs.vcxproj b/src/modules/MouseUtils/MousePointerCrosshairs/MousePointerCrosshairs.vcxproj
index 58668c663f..7fef06e960 100644
--- a/src/modules/MouseUtils/MousePointerCrosshairs/MousePointerCrosshairs.vcxproj
+++ b/src/modules/MouseUtils/MousePointerCrosshairs/MousePointerCrosshairs.vcxproj
@@ -49,7 +49,6 @@
true
_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
true
- MultiThreadedDebug
stdcpplatest
@@ -67,7 +66,6 @@
true
NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
true
- MultiThreaded
stdcpplatest
diff --git a/src/modules/MouseUtils/MousePointerCrosshairs/dllmain.cpp b/src/modules/MouseUtils/MousePointerCrosshairs/dllmain.cpp
index fd144e807b..b460e29643 100644
--- a/src/modules/MouseUtils/MousePointerCrosshairs/dllmain.cpp
+++ b/src/modules/MouseUtils/MousePointerCrosshairs/dllmain.cpp
@@ -14,6 +14,9 @@ extern void InclusiveCrosshairsRequestUpdatePosition();
extern void InclusiveCrosshairsEnsureOn();
extern void InclusiveCrosshairsEnsureOff();
extern void InclusiveCrosshairsSetExternalControl(bool enabled);
+extern void InclusiveCrosshairsSetOrientation(CrosshairsOrientation orientation);
+extern bool InclusiveCrosshairsIsEnabled();
+extern void InclusiveCrosshairsSwitch();
// Non-Localizable strings
namespace
@@ -244,12 +247,19 @@ public:
return false;
}
- if (hotkeyId == 0)
+ if (hotkeyId == 0) // Crosshairs activation
{
+ // If gliding cursor is active, cancel it and activate crosshairs
+ if (m_glideState.load() != 0)
+ {
+ CancelGliding(true /*activateCrosshairs*/);
+ return true;
+ }
+ // Otherwise, normal crosshairs toggle
InclusiveCrosshairsSwitch();
return true;
}
- if (hotkeyId == 1)
+ if (hotkeyId == 1) // Gliding cursor activation
{
HandleGlidingHotkey();
return true;
@@ -268,25 +278,44 @@ private:
SendInput(2, inputs, sizeof(INPUT));
}
- // Cancel gliding without performing the final click (Escape handling)
- void CancelGliding()
+ // Cancel gliding with option to activate crosshairs in user's preferred orientation
+ void CancelGliding(bool activateCrosshairs)
{
int state = m_glideState.load();
if (state == 0)
{
return; // nothing to cancel
}
+
+ // Stop all gliding operations
StopXTimer();
StopYTimer();
m_glideState = 0;
- InclusiveCrosshairsEnsureOff();
+ UninstallKeyboardHook();
+
+ // Reset crosshairs control and restore user settings
InclusiveCrosshairsSetExternalControl(false);
+ InclusiveCrosshairsSetOrientation(m_inclusiveCrosshairsSettings.crosshairsOrientation);
+
+ if (activateCrosshairs)
+ {
+ // User is switching to crosshairs mode - enable with their settings
+ InclusiveCrosshairsEnsureOn();
+ }
+ else
+ {
+ // User canceled (Escape) - turn off crosshairs completely
+ InclusiveCrosshairsEnsureOff();
+ }
+
+ // Reset gliding state
if (auto s = m_state)
{
s->xFraction = 0.0;
s->yFraction = 0.0;
}
- Logger::debug("Gliding cursor cancelled via Escape key");
+
+ Logger::debug("Gliding cursor cancelled (activateCrosshairs={})", activateCrosshairs ? 1 : 0);
}
// Stateless helpers operating on shared State
@@ -425,21 +454,22 @@ private:
{
return;
}
- // Simulate the AHK state machine
+
int state = m_glideState.load();
switch (state)
{
- case 0:
+ case 0: // Starting gliding
{
- // For detect for cancel key
+ // Install keyboard hook for Escape cancellation
InstallKeyboardHook();
- // Ensure crosshairs on (do not toggle off if already on)
- InclusiveCrosshairsEnsureOn();
- // Disable internal mouse hook so we control position updates explicitly
+
+ // Force crosshairs visible in BOTH orientation for gliding, regardless of user setting
+ // Set external control before enabling to prevent internal movement hook from attaching
InclusiveCrosshairsSetExternalControl(true);
- // Override crosshairs to show both for Gliding Cursor
InclusiveCrosshairsSetOrientation(CrosshairsOrientation::Both);
+ InclusiveCrosshairsEnsureOn(); // Always ensure they are visible
+ // Initialize gliding state
s->currentXPos = 0;
s->currentXSpeed = s->fastHSpeed;
s->xFraction = 0.0;
@@ -447,20 +477,17 @@ private:
int y = GetSystemMetrics(SM_CYVIRTUALSCREEN) / 2;
SetCursorPos(0, y);
InclusiveCrosshairsRequestUpdatePosition();
+
m_glideState = 1;
StartXTimer();
break;
}
- case 1:
- {
- // Slow horizontal
+ case 1: // Slow horizontal
s->currentXSpeed = s->slowHSpeed;
m_glideState = 2;
break;
- }
- case 2:
+ case 2: // Switch to vertical fast
{
- // Stop horizontal, start vertical (fast)
StopXTimer();
s->currentYSpeed = s->fastVSpeed;
s->currentYPos = 0;
@@ -471,33 +498,37 @@ private:
StartYTimer();
break;
}
- case 3:
- {
- // Slow vertical
+ case 3: // Slow vertical
s->currentYSpeed = s->slowVSpeed;
m_glideState = 4;
break;
- }
- case 4:
+ case 4: // Finalize (click and end)
default:
{
- UninstallKeyboardHook();
- // Stop vertical, click, turn crosshairs off, re-enable internal tracking, reset state
+ // Complete the gliding sequence
StopYTimer();
m_glideState = 0;
LeftClick();
- InclusiveCrosshairsEnsureOff();
+
+ // Restore normal crosshairs operation and turn them off
InclusiveCrosshairsSetExternalControl(false);
- // Restore original crosshairs orientation setting
InclusiveCrosshairsSetOrientation(m_inclusiveCrosshairsSettings.crosshairsOrientation);
- s->xFraction = 0.0;
- s->yFraction = 0.0;
+ InclusiveCrosshairsEnsureOff();
+
+ UninstallKeyboardHook();
+
+ // Reset state
+ if (auto sp = m_state)
+ {
+ sp->xFraction = 0.0;
+ sp->yFraction = 0.0;
+ }
break;
}
}
}
- // Low-level keyboard hook procedures
+ // Low-level keyboard hook for Escape cancellation
static LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode == HC_ACTION)
@@ -509,14 +540,11 @@ private:
{
if (inst->m_enabled && inst->m_glideState.load() != 0)
{
- inst->UninstallKeyboardHook();
- inst->CancelGliding();
+ inst->CancelGliding(false); // Escape cancels without activating crosshairs
}
}
}
}
-
- // Do not swallow Escape; pass it through
return CallNextHookEx(nullptr, nCode, wParam, lParam);
}
diff --git a/src/modules/MouseWithoutBorders/App/Class/Common.VK.cs b/src/modules/MouseWithoutBorders/App/Class/Common.VK.cs
index 79aa50c6dc..3f54a0281d 100644
--- a/src/modules/MouseWithoutBorders/App/Class/Common.VK.cs
+++ b/src/modules/MouseWithoutBorders/App/Class/Common.VK.cs
@@ -112,6 +112,7 @@ namespace MouseWithoutBorders
internal const int WM_RBUTTONDBLCLK = 0x206;
internal const int WM_MBUTTONDBLCLK = 0x209;
internal const int WM_MOUSEWHEEL = 0x020A;
+ internal const int WM_MOUSEHWHEEL = 0x020E;
internal const int WM_KEYDOWN = 0x100;
internal const int WM_KEYUP = 0x101;
diff --git a/src/modules/MouseWithoutBorders/App/Class/InputSimulation.cs b/src/modules/MouseWithoutBorders/App/Class/InputSimulation.cs
index 0bbd8014ae..e735db814c 100644
--- a/src/modules/MouseWithoutBorders/App/Class/InputSimulation.cs
+++ b/src/modules/MouseWithoutBorders/App/Class/InputSimulation.cs
@@ -204,6 +204,9 @@ namespace MouseWithoutBorders.Class
case Common.WM_MOUSEWHEEL:
mouse_input.mi.dwFlags |= (int)NativeMethods.MOUSEEVENTF.WHEEL;
break;
+ case Common.WM_MOUSEHWHEEL:
+ mouse_input.mi.dwFlags |= (int)NativeMethods.MOUSEEVENTF.HWHEEL;
+ break;
case Common.WM_XBUTTONUP:
mouse_input.mi.dwFlags |= (int)NativeMethods.MOUSEEVENTF.XUP;
break;
diff --git a/src/modules/MouseWithoutBorders/App/Class/NativeMethods.cs b/src/modules/MouseWithoutBorders/App/Class/NativeMethods.cs
index 539e0267bd..831144f377 100644
--- a/src/modules/MouseWithoutBorders/App/Class/NativeMethods.cs
+++ b/src/modules/MouseWithoutBorders/App/Class/NativeMethods.cs
@@ -556,6 +556,7 @@ namespace MouseWithoutBorders.Class
XDOWN = 0x0080,
XUP = 0x0100,
WHEEL = 0x0800,
+ HWHEEL = 0x1000,
VIRTUALDESK = 0x4000,
ABSOLUTE = 0x8000,
}
diff --git a/src/modules/NewPlus/NewShellExtensionContextMenu/NewShellExtensionContextMenu.vcxproj b/src/modules/NewPlus/NewShellExtensionContextMenu/NewShellExtensionContextMenu.vcxproj
index 90058a503e..6685afafc2 100644
--- a/src/modules/NewPlus/NewShellExtensionContextMenu/NewShellExtensionContextMenu.vcxproj
+++ b/src/modules/NewPlus/NewShellExtensionContextMenu/NewShellExtensionContextMenu.vcxproj
@@ -67,8 +67,6 @@
false
dll.def
runtimeobject.lib;$(CoreLibraryDependencies)
-
-
del $(OutDir)\NewPlusPackage.msix /q
@@ -100,8 +98,6 @@ MakeAppx.exe pack /d . /p $(OutDir)NewPlusPackage.msix /nv
false
dll.def
runtimeobject.lib;$(CoreLibraryDependencies)
-
-
del $(OutDir)\NewPlusPackage.msix /q
diff --git a/src/modules/Workspaces/WorkspacesLauncher/WorkspacesLauncher.vcxproj b/src/modules/Workspaces/WorkspacesLauncher/WorkspacesLauncher.vcxproj
index 9d4fc4bcab..7be5219a9f 100644
--- a/src/modules/Workspaces/WorkspacesLauncher/WorkspacesLauncher.vcxproj
+++ b/src/modules/Workspaces/WorkspacesLauncher/WorkspacesLauncher.vcxproj
@@ -29,7 +29,6 @@
_DEBUG;%(PreprocessorDefinitions)
Disabled
true
- MultiThreadedDebug
true
@@ -40,7 +39,6 @@
NDEBUG;%(PreprocessorDefinitions)
MaxSpeed
false
- MultiThreaded
true
true
diff --git a/src/modules/Workspaces/WorkspacesSnapshotTool/WorkspacesSnapshotTool.vcxproj b/src/modules/Workspaces/WorkspacesSnapshotTool/WorkspacesSnapshotTool.vcxproj
index 05e4241c1c..ad7a96ec84 100644
--- a/src/modules/Workspaces/WorkspacesSnapshotTool/WorkspacesSnapshotTool.vcxproj
+++ b/src/modules/Workspaces/WorkspacesSnapshotTool/WorkspacesSnapshotTool.vcxproj
@@ -29,7 +29,6 @@
_DEBUG;%(PreprocessorDefinitions)
Disabled
true
- MultiThreadedDebug
true
@@ -40,7 +39,6 @@
NDEBUG;%(PreprocessorDefinitions)
MaxSpeed
false
- MultiThreaded
true
true
diff --git a/src/modules/Workspaces/WorkspacesWindowArranger/WorkspacesWindowArranger.vcxproj b/src/modules/Workspaces/WorkspacesWindowArranger/WorkspacesWindowArranger.vcxproj
index 2451be2470..4555f6257b 100644
--- a/src/modules/Workspaces/WorkspacesWindowArranger/WorkspacesWindowArranger.vcxproj
+++ b/src/modules/Workspaces/WorkspacesWindowArranger/WorkspacesWindowArranger.vcxproj
@@ -29,7 +29,6 @@
_DEBUG;%(PreprocessorDefinitions)
Disabled
true
- MultiThreadedDebug
true
@@ -40,7 +39,6 @@
NDEBUG;%(PreprocessorDefinitions)
MaxSpeed
false
- MultiThreaded
true
true
diff --git a/src/modules/ZoomIt/ZoomIt/ZoomIt.vcxproj b/src/modules/ZoomIt/ZoomIt/ZoomIt.vcxproj
index d054d2b4bd..f12898dbd4 100644
--- a/src/modules/ZoomIt/ZoomIt/ZoomIt.vcxproj
+++ b/src/modules/ZoomIt/ZoomIt/ZoomIt.vcxproj
@@ -81,7 +81,6 @@
MaxSpeed
__ZOOMIT_POWERTOYS__;_UNICODE;UNICODE;WINVER=0x602;NDEBUG;_WIN32_WINNT=0x602;_WIN32_WINDOWS=0x501;WIN32;_WINDOWS;MSVC6=1;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)
true
- MultiThreaded
true
@@ -103,7 +102,6 @@
MaxSpeed
__ZOOMIT_POWERTOYS__;_UNICODE;UNICODE;WINVER=0x602;NDEBUG;_WIN32_WINNT=0x602;_WIN32_WINDOWS=0x501;WIN32;_WINDOWS;MSVC6=1;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)
true
- MultiThreaded
true
@@ -126,7 +124,6 @@
MaxSpeed
__ZOOMIT_POWERTOYS__;_UNICODE;UNICODE;WINVER=0x602;NDEBUG;_WIN32_WINNT=0x602;_WIN32_WINDOWS=0x501;WIN32;_WINDOWS;MSVC6=1;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)
true
- MultiThreaded
true
@@ -148,7 +145,6 @@
Disabled
__ZOOMIT_POWERTOYS__;_UNICODE;UNICODE;WINVER=0x0602;_DEBUG;_WIN32_WINNT=0x602.MSVC6;_WIN32_WINDOWS=0x600;WIN32;_WINDOWS;_WIN32_WINNT=0x602;MSVC6=1;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)
EnableFastChecks
- MultiThreadedDebug
_DEBUG;_M_IX86;%(PreprocessorDefinitions)
@@ -169,7 +165,6 @@
Disabled
__ZOOMIT_POWERTOYS__;_UNICODE;UNICODE;WINVER=0x0602;_DEBUG;_WIN32_WINNT=0x602.MSVC6;_WIN32_WINDOWS=0x600;WIN32;_WINDOWS;_WIN32_WINNT=0x602;MSVC6=1;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)
EnableFastChecks
- MultiThreadedDebug
_DEBUG;_M_X64;%(PreprocessorDefinitions)
@@ -191,7 +186,6 @@
Disabled
__ZOOMIT_POWERTOYS__;_UNICODE;UNICODE;WINVER=0x0602;_DEBUG;_WIN32_WINNT=0x602.MSVC6;_WIN32_WINDOWS=0x600;WIN32;_WINDOWS;_WIN32_WINNT=0x602;MSVC6=1;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)
EnableFastChecks
- MultiThreadedDebug
_DEBUG;_M_ARM64;%(PreprocessorDefinitions)
diff --git a/src/modules/alwaysontop/AlwaysOnTop/AlwaysOnTop.vcxproj b/src/modules/alwaysontop/AlwaysOnTop/AlwaysOnTop.vcxproj
index bf3e5c6851..5adad25bac 100644
--- a/src/modules/alwaysontop/AlwaysOnTop/AlwaysOnTop.vcxproj
+++ b/src/modules/alwaysontop/AlwaysOnTop/AlwaysOnTop.vcxproj
@@ -29,7 +29,6 @@
_DEBUG;%(PreprocessorDefinitions)
Disabled
true
- MultiThreadedDebug
true
@@ -40,7 +39,6 @@
NDEBUG;%(PreprocessorDefinitions)
MaxSpeed
false
- MultiThreaded
true
true
diff --git a/src/modules/cmdpal/CmdPalKeyboardService/CmdPalKeyboardService.vcxproj b/src/modules/cmdpal/CmdPalKeyboardService/CmdPalKeyboardService.vcxproj
index f891ce96e6..4e20f55383 100644
--- a/src/modules/cmdpal/CmdPalKeyboardService/CmdPalKeyboardService.vcxproj
+++ b/src/modules/cmdpal/CmdPalKeyboardService/CmdPalKeyboardService.vcxproj
@@ -141,43 +141,4 @@
-
-
-
-
-
-
- MultiThreadedDebug
-
-
-
- %(IgnoreSpecificDefaultLibraries);libucrtd.lib
- %(AdditionalOptions) /defaultlib:ucrtd.lib
-
-
-
-
-
- MultiThreaded
-
-
-
- %(IgnoreSpecificDefaultLibraries);libucrt.lib
- %(AdditionalOptions) /defaultlib:ucrt.lib
-
-
-
-
\ No newline at end of file
diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/TopLevelViewModel.cs b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/TopLevelViewModel.cs
index 9d05e8019f..fc5e36d1e2 100644
--- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/TopLevelViewModel.cs
+++ b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/TopLevelViewModel.cs
@@ -219,7 +219,7 @@ public sealed partial class TopLevelViewModel : ObservableObject, IListItem
{
PropChanged?.Invoke(this, new PropChangedEventArgs(e.PropertyName));
- if (e.PropertyName == "IsInitialized")
+ if (e.PropertyName is "IsInitialized" or nameof(CommandItemViewModel.Command))
{
GenerateId();
diff --git a/src/modules/cmdpal/Microsoft.Terminal.UI/Microsoft.Terminal.UI.vcxproj b/src/modules/cmdpal/Microsoft.Terminal.UI/Microsoft.Terminal.UI.vcxproj
index 6e474cf5f3..347b5a1bc6 100644
--- a/src/modules/cmdpal/Microsoft.Terminal.UI/Microsoft.Terminal.UI.vcxproj
+++ b/src/modules/cmdpal/Microsoft.Terminal.UI/Microsoft.Terminal.UI.vcxproj
@@ -74,35 +74,11 @@
stdcpp20
-
-
- MultiThreadedDebug
-
-
-
- %(IgnoreSpecificDefaultLibraries);libucrtd.lib
- %(AdditionalOptions) /defaultlib:ucrtd.lib /profile /opt:ref /opt:icf
-
stdcpp20
-
-
- MultiThreaded
-
-
-
- %(IgnoreSpecificDefaultLibraries);libucrt.lib
- %(AdditionalOptions) /defaultlib:ucrt.lib /profile /opt:ref /opt:icf
-
diff --git a/src/modules/cmdpal/Tests/Microsoft.CmdPal.Ext.Bookmarks.UnitTests/BookmarkManagerTests.cs b/src/modules/cmdpal/Tests/Microsoft.CmdPal.Ext.Bookmarks.UnitTests/BookmarkManagerTests.cs
index 0751b5afe3..b4e533d66d 100644
--- a/src/modules/cmdpal/Tests/Microsoft.CmdPal.Ext.Bookmarks.UnitTests/BookmarkManagerTests.cs
+++ b/src/modules/cmdpal/Tests/Microsoft.CmdPal.Ext.Bookmarks.UnitTests/BookmarkManagerTests.cs
@@ -186,4 +186,48 @@ public class BookmarkManagerTests
Assert.AreEqual("D:\\UpdatedPath", updatedBookmark.Bookmark);
Assert.IsTrue(bookmarkUpdatedEventFired);
}
+
+ [TestMethod]
+ public void BookmarkManager_LegacyData_IdsArePersistedAcrossLoads()
+ {
+ // Arrange
+ const string json = """
+ {
+ "Data":
+ [
+ { "Name": "C:\\","Bookmark": "C:\\" },
+ { "Name": "Bing.com","Bookmark": "https://bing.com" }
+ ]
+ }
+ """;
+
+ var dataSource = new MockBookmarkDataSource(json);
+
+ // First load: IDs should be generated for legacy entries
+ var manager1 = new BookmarksManager(dataSource);
+ var firstLoad = manager1.Bookmarks.ToList();
+ Assert.AreEqual(2, firstLoad.Count);
+ Assert.AreNotEqual(Guid.Empty, firstLoad[0].Id);
+ Assert.AreNotEqual(Guid.Empty, firstLoad[1].Id);
+
+ // Keep a name->id map to be insensitive to ordering
+ var firstIdsByName = firstLoad.ToDictionary(b => b.Name, b => b.Id);
+
+ // Wait deterministically for async persistence to complete
+ var wasSaved = dataSource.WaitForSave(1, 5000);
+ Assert.IsTrue(wasSaved, "Data was not saved within the expected time.");
+
+ // Second load: should read back the same IDs from persisted data
+ var manager2 = new BookmarksManager(dataSource);
+ var secondLoad = manager2.Bookmarks.ToList();
+ Assert.AreEqual(2, secondLoad.Count);
+
+ var secondIdsByName = secondLoad.ToDictionary(b => b.Name, b => b.Id);
+
+ foreach (var kvp in firstIdsByName)
+ {
+ Assert.IsTrue(secondIdsByName.ContainsKey(kvp.Key), $"Missing bookmark '{kvp.Key}' after reload.");
+ Assert.AreEqual(kvp.Value, secondIdsByName[kvp.Key], $"Bookmark '{kvp.Key}' upgraded ID was not persisted across loads.");
+ }
+ }
}
diff --git a/src/modules/cmdpal/Tests/Microsoft.CmdPal.Ext.Bookmarks.UnitTests/MockBookmarkDataSource.cs b/src/modules/cmdpal/Tests/Microsoft.CmdPal.Ext.Bookmarks.UnitTests/MockBookmarkDataSource.cs
index 3980ac13c6..02d71d6d77 100644
--- a/src/modules/cmdpal/Tests/Microsoft.CmdPal.Ext.Bookmarks.UnitTests/MockBookmarkDataSource.cs
+++ b/src/modules/cmdpal/Tests/Microsoft.CmdPal.Ext.Bookmarks.UnitTests/MockBookmarkDataSource.cs
@@ -2,6 +2,8 @@
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
+using System;
+using System.Threading;
using Microsoft.CmdPal.Ext.Bookmarks.Persistence;
namespace Microsoft.CmdPal.Ext.Bookmarks.UnitTests;
@@ -9,6 +11,7 @@ namespace Microsoft.CmdPal.Ext.Bookmarks.UnitTests;
internal sealed class MockBookmarkDataSource : IBookmarkDataSource
{
private string _jsonData;
+ private int _saveCount;
public MockBookmarkDataSource(string initialJsonData = "[]")
{
@@ -23,5 +26,26 @@ internal sealed class MockBookmarkDataSource : IBookmarkDataSource
public void SaveBookmarkData(string jsonData)
{
_jsonData = jsonData;
+ Interlocked.Increment(ref _saveCount);
+ }
+
+ public int SaveCount => Volatile.Read(ref _saveCount);
+
+ // Waits until at least expectedMinSaves have occurred or the timeout elapses.
+ // Returns true if the condition was met, false on timeout.
+ public bool WaitForSave(int expectedMinSaves = 1, int timeoutMs = 2000)
+ {
+ var start = Environment.TickCount;
+ while (Volatile.Read(ref _saveCount) < expectedMinSaves)
+ {
+ if (Environment.TickCount - start > timeoutMs)
+ {
+ return false;
+ }
+
+ Thread.Sleep(50);
+ }
+
+ return true;
}
}
diff --git a/src/modules/cmdpal/ext/Microsoft.CmdPal.Ext.Bookmark/BookmarksManager.cs b/src/modules/cmdpal/ext/Microsoft.CmdPal.Ext.Bookmark/BookmarksManager.cs
index 1eb57fb7eb..fde574360f 100644
--- a/src/modules/cmdpal/ext/Microsoft.CmdPal.Ext.Bookmark/BookmarksManager.cs
+++ b/src/modules/cmdpal/ext/Microsoft.CmdPal.Ext.Bookmark/BookmarksManager.cs
@@ -103,7 +103,33 @@ internal sealed partial class BookmarksManager : IDisposable, IBookmarksManager
try
{
var jsonData = _dataSource.GetBookmarkData();
- _bookmarksData = _parser.ParseBookmarks(jsonData);
+ var bookmarksData = _parser.ParseBookmarks(jsonData);
+
+ // Upgrade old bookmarks if necessary
+ // Pre .95 versions did not assign IDs to bookmarks
+ var upgraded = false;
+ for (var index = 0; index < bookmarksData.Data.Count; index++)
+ {
+ var bookmark = bookmarksData.Data[index];
+ if (bookmark.Id == Guid.Empty)
+ {
+ bookmarksData.Data[index] = bookmark with { Id = Guid.NewGuid() };
+ upgraded = true;
+ }
+ }
+
+ lock (_lock)
+ {
+ _bookmarksData = bookmarksData;
+ }
+
+ // LOAD BEARING: Save upgraded data back to file
+ // This ensures that old bookmarks are not repeatedly upgraded on each load,
+ // as the hotkeys and aliases are tied to the generated bookmark IDs.
+ if (upgraded)
+ {
+ _ = SaveChangesAsync();
+ }
}
catch (Exception ex)
{
diff --git a/src/modules/cmdpal/ext/Microsoft.CmdPal.Ext.Bookmark/Persistence/BookmarkData.cs b/src/modules/cmdpal/ext/Microsoft.CmdPal.Ext.Bookmark/Persistence/BookmarkData.cs
index 3129e1b578..b577f9cb35 100644
--- a/src/modules/cmdpal/ext/Microsoft.CmdPal.Ext.Bookmark/Persistence/BookmarkData.cs
+++ b/src/modules/cmdpal/ext/Microsoft.CmdPal.Ext.Bookmark/Persistence/BookmarkData.cs
@@ -19,7 +19,7 @@ public sealed record BookmarkData
[SetsRequiredMembers]
public BookmarkData(Guid id, string? name, string? bookmark)
{
- Id = id == Guid.Empty ? Guid.NewGuid() : id;
+ Id = id;
Name = name ?? string.Empty;
Bookmark = bookmark ?? string.Empty;
}
diff --git a/src/modules/cmdpal/extensionsdk/Microsoft.CommandPalette.Extensions/Microsoft.CommandPalette.Extensions.vcxproj b/src/modules/cmdpal/extensionsdk/Microsoft.CommandPalette.Extensions/Microsoft.CommandPalette.Extensions.vcxproj
index a6cad871ab..92baf3dfa6 100644
--- a/src/modules/cmdpal/extensionsdk/Microsoft.CommandPalette.Extensions/Microsoft.CommandPalette.Extensions.vcxproj
+++ b/src/modules/cmdpal/extensionsdk/Microsoft.CommandPalette.Extensions/Microsoft.CommandPalette.Extensions.vcxproj
@@ -68,34 +68,6 @@
true
false
-
-
-
- MultiThreadedDebug
-
-
-
- %(IgnoreSpecificDefaultLibraries);libucrtd.lib
- %(AdditionalOptions) /defaultlib:ucrtd.lib /profile /opt:ref /opt:icf
-
-
-
-
-
- MultiThreaded
-
-
-
- %(IgnoreSpecificDefaultLibraries);libucrt.lib
- %(AdditionalOptions) /defaultlib:ucrt.lib /profile /opt:ref /opt:icf
-
-
diff --git a/src/modules/fancyzones/FancyZones/FancyZones.vcxproj b/src/modules/fancyzones/FancyZones/FancyZones.vcxproj
index b54ee19e34..7aab504830 100644
--- a/src/modules/fancyzones/FancyZones/FancyZones.vcxproj
+++ b/src/modules/fancyzones/FancyZones/FancyZones.vcxproj
@@ -26,7 +26,6 @@
_DEBUG;%(PreprocessorDefinitions)
Disabled
true
- MultiThreadedDebug
true
@@ -37,7 +36,6 @@
NDEBUG;%(PreprocessorDefinitions)
MaxSpeed
false
- MultiThreaded
true
true
diff --git a/src/modules/keyboardmanager/KeyboardManagerEditor/KeyboardManagerEditor.vcxproj b/src/modules/keyboardmanager/KeyboardManagerEditor/KeyboardManagerEditor.vcxproj
index 3c124d63e4..8a4fa95889 100644
--- a/src/modules/keyboardmanager/KeyboardManagerEditor/KeyboardManagerEditor.vcxproj
+++ b/src/modules/keyboardmanager/KeyboardManagerEditor/KeyboardManagerEditor.vcxproj
@@ -30,7 +30,6 @@
_DEBUG;%(PreprocessorDefinitions)
Disabled
true
- MultiThreadedDebug
true
@@ -41,7 +40,6 @@
NDEBUG;%(PreprocessorDefinitions)
MaxSpeed
false
- MultiThreaded
true
true
diff --git a/src/modules/powerrename/PowerRename.FuzzingTest/PowerRename.FuzzingTest.vcxproj b/src/modules/powerrename/PowerRename.FuzzingTest/PowerRename.FuzzingTest.vcxproj
index f9e245559c..1a7ca91972 100644
--- a/src/modules/powerrename/PowerRename.FuzzingTest/PowerRename.FuzzingTest.vcxproj
+++ b/src/modules/powerrename/PowerRename.FuzzingTest/PowerRename.FuzzingTest.vcxproj
@@ -44,7 +44,6 @@
true
NotUsing
/fsanitize=address /fsanitize-coverage=inline-8bit-counters /fsanitize-coverage=edge /fsanitize-coverage=trace-cmp /fsanitize-coverage=trace-div %(AdditionalOptions)
- MultiThreaded
stdcpplatest
..\;..\lib\;..\..\..\;%(AdditionalIncludeDirectories)
diff --git a/tools/project_template/ModuleTemplate/ModuleTemplate.vcxproj b/tools/project_template/ModuleTemplate/ModuleTemplate.vcxproj
index 028007de67..39c656a6cc 100644
--- a/tools/project_template/ModuleTemplate/ModuleTemplate.vcxproj
+++ b/tools/project_template/ModuleTemplate/ModuleTemplate.vcxproj
@@ -46,7 +46,6 @@
true
_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
true
- MultiThreadedDebug
stdcpplatest
@@ -64,7 +63,6 @@
true
NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
true
- MultiThreaded
stdcpplatest
diff --git a/tools/project_template/ModuleTemplate/ModuleTemplateCompileTest.vcxproj b/tools/project_template/ModuleTemplate/ModuleTemplateCompileTest.vcxproj
index 297516b0d5..a1ef0522aa 100644
--- a/tools/project_template/ModuleTemplate/ModuleTemplateCompileTest.vcxproj
+++ b/tools/project_template/ModuleTemplate/ModuleTemplateCompileTest.vcxproj
@@ -47,7 +47,6 @@
Disabled
true
_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
- MultiThreadedDebug
stdcpplatest
@@ -64,7 +63,6 @@
true
true
NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
- MultiThreaded
stdcpplatest