From 2abd1058fa5064544c1e7d0c2d0fcf4ae5c38aad Mon Sep 17 00:00:00 2001 From: Stefan Markovic <57057282+stefansjfw@users.noreply.github.com> Date: Sat, 24 Aug 2024 15:31:22 +0200 Subject: [PATCH] [Workspaces] Bring Editor to foreground on hotkey (#34414) --- .../WorkspacesModuleInterface/dllmain.cpp | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/src/modules/Workspaces/WorkspacesModuleInterface/dllmain.cpp b/src/modules/Workspaces/WorkspacesModuleInterface/dllmain.cpp index 33ec6a1c16..e50c68331f 100644 --- a/src/modules/Workspaces/WorkspacesModuleInterface/dllmain.cpp +++ b/src/modules/Workspaces/WorkspacesModuleInterface/dllmain.cpp @@ -75,7 +75,14 @@ public: virtual void OnHotkeyEx() override { - launch_editor(); + if (is_process_running()) + { + bring_process_to_front(); + } + else + { + launch_editor(); + } } // Return the configured status for the gpo policy for the module @@ -323,6 +330,29 @@ private: m_hProcess = sei.hProcess; } + void bring_process_to_front() + { + auto enum_windows = [](HWND hwnd, LPARAM param) -> BOOL { + HANDLE process_handle = reinterpret_cast(param); + DWORD window_process_id = 0; + + GetWindowThreadProcessId(hwnd, &window_process_id); + if (GetProcessId(process_handle) == window_process_id) + { + SetForegroundWindow(hwnd); + return FALSE; + } + return TRUE; + }; + + EnumWindows(enum_windows, (LPARAM)m_hProcess); + } + + bool is_process_running() const + { + return WaitForSingleObject(m_hProcess, 0) == WAIT_TIMEOUT; + } + std::wstring app_name; //contains the non localized key of the powertoy std::wstring app_key;