diff --git a/src/common/common.vcxproj b/src/common/common.vcxproj
index fe2fc94f0b..b6d64bff05 100644
--- a/src/common/common.vcxproj
+++ b/src/common/common.vcxproj
@@ -82,7 +82,7 @@
true
- Shlwapi.lib;
+ shlwapi.lib;shcore.lib
@@ -111,7 +111,7 @@
true
- Shlwapi.lib;
+ shlwapi.lib;shcore.lib
diff --git a/src/modules/keyboardmanager/common/Helpers.cpp b/src/modules/keyboardmanager/common/Helpers.cpp
index 07f2cdb059..91128de690 100644
--- a/src/modules/keyboardmanager/common/Helpers.cpp
+++ b/src/modules/keyboardmanager/common/Helpers.cpp
@@ -75,6 +75,17 @@ namespace KeyboardManagerHelper
case VK_NUMLOCK:
case VK_SNAPSHOT:
case VK_CANCEL:
+ // If the extended flag is not set for the following keys, their NumPad versions are sent. This causes weird behavior when NumLock is on (more information at https://github.com/microsoft/PowerToys/issues/3478)
+ case VK_INSERT:
+ case VK_HOME:
+ case VK_PRIOR:
+ case VK_DELETE:
+ case VK_END:
+ case VK_NEXT:
+ case VK_LEFT:
+ case VK_DOWN:
+ case VK_RIGHT:
+ case VK_UP:
return true;
default:
return false;
diff --git a/src/modules/keyboardmanager/common/KeyboardManagerCommon.vcxproj b/src/modules/keyboardmanager/common/KeyboardManagerCommon.vcxproj
index a46e97cbf6..7ce6ece444 100644
--- a/src/modules/keyboardmanager/common/KeyboardManagerCommon.vcxproj
+++ b/src/modules/keyboardmanager/common/KeyboardManagerCommon.vcxproj
@@ -100,6 +100,12 @@
Use
pch.h
+
+ shlwapi.lib;
+
+
+ shlwapi.lib;
+
diff --git a/src/modules/keyboardmanager/dll/KeyboardManager.vcxproj b/src/modules/keyboardmanager/dll/KeyboardManager.vcxproj
index 42466fbb94..8c93516649 100644
--- a/src/modules/keyboardmanager/dll/KeyboardManager.vcxproj
+++ b/src/modules/keyboardmanager/dll/KeyboardManager.vcxproj
@@ -103,12 +103,6 @@
4002
4002
-
- shcore.lib;shlwapi.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
-
-
- shcore.lib;shlwapi.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
-
diff --git a/src/modules/keyboardmanager/dll/pch.h b/src/modules/keyboardmanager/dll/pch.h
index 616ba8b3ce..8911a297e3 100644
--- a/src/modules/keyboardmanager/dll/pch.h
+++ b/src/modules/keyboardmanager/dll/pch.h
@@ -5,4 +5,4 @@
#include
#include
#include
-#include
\ No newline at end of file
+#include
diff --git a/src/modules/keyboardmanager/test/KeyboardManagerRemapLogicTest.cpp b/src/modules/keyboardmanager/test/KeyboardManagerRemapLogicTest.cpp
index cff6c49a12..6387919b62 100644
--- a/src/modules/keyboardmanager/test/KeyboardManagerRemapLogicTest.cpp
+++ b/src/modules/keyboardmanager/test/KeyboardManagerRemapLogicTest.cpp
@@ -45,6 +45,34 @@ namespace KeyboardManagerRemapLogicTests
}
};
+ TEST_CLASS (SetKeyEventTests)
+ {
+ public:
+ TEST_METHOD_INITIALIZE(InitializeTestEnv)
+ {
+ // Reset test environment
+ TestHelpers::ResetTestEnv(mockedInputHandler, testState);
+ }
+
+ // Test if SetKeyEvent sets the extended key flag for all the extended keys
+ TEST_METHOD (SetKeyEvent_ShouldUseExtendedKeyFlag_WhenArgumentIsExtendedKey)
+ {
+ const int nInputs = 15;
+ INPUT input[nInputs] = {};
+
+ // List of extended keys
+ WORD keyCodes[nInputs] = { VK_RCONTROL, VK_RMENU, VK_NUMLOCK, VK_SNAPSHOT, VK_CANCEL, VK_INSERT, VK_HOME, VK_PRIOR, VK_DELETE, VK_END, VK_NEXT, VK_LEFT, VK_DOWN, VK_RIGHT, VK_UP };
+
+ for (int i = 0; i < nInputs; i++)
+ {
+ // Set key events for all the extended keys
+ KeyboardManagerHelper::SetKeyEvent(input, i, INPUT_KEYBOARD, keyCodes[i], 0, 0);
+ // Extended key flag should be set
+ Assert::AreEqual(true, bool(input[i].ki.dwFlags & KEYEVENTF_EXTENDEDKEY));
+ }
+ }
+ };
+
TEST_CLASS (SingleKeyRemappingTests)
{
public:
diff --git a/src/modules/keyboardmanager/test/pch.h b/src/modules/keyboardmanager/test/pch.h
index 6f70f09bee..0a2f9ed9c5 100644
--- a/src/modules/keyboardmanager/test/pch.h
+++ b/src/modules/keyboardmanager/test/pch.h
@@ -1 +1,2 @@
#pragma once
+#pragma comment(lib, "shlwapi.lib")