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")