#pragma once class VirtualDesktop { public: static VirtualDesktop& instance(); // saved values GUID GetCurrentVirtualDesktopId() const noexcept; GUID GetPreviousVirtualDesktopId() const noexcept; void UpdateVirtualDesktopId() noexcept; // IVirtualDesktopManager bool IsWindowOnCurrentDesktop(HWND window) const; std::optional GetDesktopId(HWND window) const; std::optional GetDesktopIdByTopLevelWindows() const; std::vector> GetWindowsRelatedToDesktops() const; // registry std::optional GetCurrentVirtualDesktopIdFromRegistry() const; std::optional> GetVirtualDesktopIdsFromRegistry() const; bool IsVirtualDesktopIdSavedInRegistry(GUID id) const; private: VirtualDesktop(); ~VirtualDesktop(); IVirtualDesktopManager* m_vdManager{nullptr}; GUID m_currentVirtualDesktopId{}; GUID m_previousDesktopId{}; std::optional> GetVirtualDesktopIdsFromRegistry(HKEY hKey) const; };