diff --git a/src/modules/fancyzones/FancyZonesLib/FancyZones.cpp b/src/modules/fancyzones/FancyZonesLib/FancyZones.cpp index d5b35de3cf..fedf57b893 100644 --- a/src/modules/fancyzones/FancyZonesLib/FancyZones.cpp +++ b/src/modules/fancyzones/FancyZonesLib/FancyZones.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -172,6 +173,7 @@ private: const HINSTANCE m_hinstance{}; HWND m_window{}; + KeyboardInput m_keyboardInput{}; std::unique_ptr m_windowMouseSnapper{}; WindowKeyboardSnap m_windowKeyboardSnapper{}; WorkAreaConfiguration m_workAreaConfiguration; @@ -220,7 +222,13 @@ FancyZones::Run() noexcept m_window = CreateWindowExW(WS_EX_TOOLWINDOW, NonLocalizable::ToolWindowClassName, L"", WS_POPUP, 0, 0, 0, 0, nullptr, nullptr, m_hinstance, this); if (!m_window) { - Logger::error(L"Failed to create FancyZones window"); + Logger::critical(L"Failed to create FancyZones window"); + return; + } + + if (!m_keyboardInput.Initialize(m_window)) + { + Logger::critical(L"Failed to register raw input device"); return; } diff --git a/src/modules/fancyzones/FancyZonesLib/FancyZonesLib.vcxproj b/src/modules/fancyzones/FancyZonesLib/FancyZonesLib.vcxproj index 8b8315edb6..bff83a8d09 100644 --- a/src/modules/fancyzones/FancyZonesLib/FancyZonesLib.vcxproj +++ b/src/modules/fancyzones/FancyZonesLib/FancyZonesLib.vcxproj @@ -53,6 +53,7 @@ + @@ -114,6 +115,7 @@ ../pch.h + diff --git a/src/modules/fancyzones/FancyZonesLib/FancyZonesLib.vcxproj.filters b/src/modules/fancyzones/FancyZonesLib/FancyZonesLib.vcxproj.filters index c72ebd2892..d2a909f577 100644 --- a/src/modules/fancyzones/FancyZonesLib/FancyZonesLib.vcxproj.filters +++ b/src/modules/fancyzones/FancyZonesLib/FancyZonesLib.vcxproj.filters @@ -168,6 +168,9 @@ Header Files\FancyZonesData + + Header Files + @@ -278,6 +281,9 @@ Source Files + + Source Files + diff --git a/src/modules/fancyzones/FancyZonesLib/KeyboardInput.cpp b/src/modules/fancyzones/FancyZonesLib/KeyboardInput.cpp new file mode 100644 index 0000000000..dfc40da836 --- /dev/null +++ b/src/modules/fancyzones/FancyZonesLib/KeyboardInput.cpp @@ -0,0 +1,24 @@ +#include "pch.h" +#include "KeyboardInput.h" + +#include + +#include +#include + +bool KeyboardInput::Initialize(HWND window) +{ + RAWINPUTDEVICE inputDevice{}; + inputDevice.usUsagePage = HID_USAGE_PAGE_GENERIC; + inputDevice.usUsage = HID_USAGE_GENERIC_KEYBOARD; + inputDevice.dwFlags = RIDEV_INPUTSINK; + inputDevice.hwndTarget = window; + + bool res = RegisterRawInputDevices(&inputDevice, 1, sizeof(inputDevice)); + if (!res) + { + Logger::error(L"RegisterRawInputDevices error: {}", get_last_error_or_default(GetLastError())); + } + + return res; +} diff --git a/src/modules/fancyzones/FancyZonesLib/KeyboardInput.h b/src/modules/fancyzones/FancyZonesLib/KeyboardInput.h new file mode 100644 index 0000000000..a461ece4c3 --- /dev/null +++ b/src/modules/fancyzones/FancyZonesLib/KeyboardInput.h @@ -0,0 +1,10 @@ +#pragma once + +class KeyboardInput +{ +public: + KeyboardInput() = default; + ~KeyboardInput() = default; + + bool Initialize(HWND window); +};