#pragma once #include "WorkArea.h" #include "on_thread_executor.h" class VirtualDesktop { public: VirtualDesktop(const std::function& vdInitCallback, const std::function& vdUpdatedCallback); ~VirtualDesktop() = default; void Init(); void UnInit(); std::optional GetWindowDesktopId(HWND topLevelWindow) const; std::optional GetCurrentVirtualDesktopId() const; std::optional> GetVirtualDesktopIds() const; bool IsWindowOnCurrentDesktop(HWND window) const; std::optional GetDesktopId(HWND window) const; private: std::function m_vdInitCallback; std::function m_vdUpdatedCallback; IVirtualDesktopManager* m_vdManager; OnThreadExecutor m_virtualDesktopTrackerThread; wil::unique_handle m_terminateVirtualDesktopTrackerEvent; std::optional> GetVirtualDesktopIds(HKEY hKey) const; std::optional GetDesktopIdByTopLevelWindows() const; void HandleVirtualDesktopUpdates(); };