diff --git a/src/modules/keyboardmanager/common/Helpers.cpp b/src/modules/keyboardmanager/common/Helpers.cpp index 2a5bc0e8f5..3cbb1a9ba2 100644 --- a/src/modules/keyboardmanager/common/Helpers.cpp +++ b/src/modules/keyboardmanager/common/Helpers.cpp @@ -192,6 +192,10 @@ namespace KeyboardManagerHelper keyEventArray[index].ki.dwFlags |= KEYEVENTF_EXTENDEDKEY; } keyEventArray[index].ki.dwExtraInfo = extraInfo; + + // Set wScan to the value from MapVirtualKey as some applications may use the scan code for handling input, for instance, Windows Terminal ignores non-character input which has scancode set to 0. + // MapVirtualKey returns 0 if the key code does not correspond to a physical key (such as unassigned/reserved keys). More details at https://github.com/microsoft/PowerToys/pull/7143#issue-498877747 + keyEventArray[index].ki.wScan = (WORD)MapVirtualKey(keyCode, MAPVK_VK_TO_VSC); } // Function to set the dummy key events used for remapping shortcuts, required to ensure releasing a modifier doesn't trigger another action (For example, Win->Start Menu or Alt->Menu bar) diff --git a/src/modules/keyboardmanager/test/SetKeyEventTests.cpp b/src/modules/keyboardmanager/test/SetKeyEventTests.cpp index 9bf57a13be..62cb922628 100644 --- a/src/modules/keyboardmanager/test/SetKeyEventTests.cpp +++ b/src/modules/keyboardmanager/test/SetKeyEventTests.cpp @@ -41,5 +41,19 @@ namespace RemappingLogicTests Assert::AreEqual(true, bool(input[i].ki.dwFlags & KEYEVENTF_EXTENDEDKEY)); } } + + // Test if SetKeyEvent sets the scan code field to 0 for dummy key + TEST_METHOD (SetKeyEvent_ShouldSetScanCodeFieldTo0_WhenArgumentIsDummyKey) + { + const int nInputs = KeyboardManagerConstants::DUMMY_KEY_EVENT_SIZE; + INPUT input[nInputs] = {}; + + int index = 0; + KeyboardManagerHelper::SetDummyKeyEvent(input, index, 0); + + // Assert that wScan for both inputs is 0 + Assert::AreEqual(0, input[0].ki.wScan); + Assert::AreEqual(0, input[1].ki.wScan); + } }; }