2021-07-07 13:18:52 +03:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#include "WorkArea.h"
|
|
|
|
|
#include "on_thread_executor.h"
|
|
|
|
|
|
|
|
|
|
class VirtualDesktop
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
VirtualDesktop(const std::function<void()>& vdInitCallback, const std::function<void()>& vdUpdatedCallback);
|
|
|
|
|
~VirtualDesktop() = default;
|
|
|
|
|
|
2021-09-23 00:39:48 +03:00
|
|
|
inline bool IsVirtualDesktopIdSavedInRegistry(GUID id) const
|
|
|
|
|
{
|
|
|
|
|
auto ids = GetVirtualDesktopIdsFromRegistry();
|
|
|
|
|
if (!ids.has_value())
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (const auto& regId : *ids)
|
|
|
|
|
{
|
|
|
|
|
if (regId == id)
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
2021-07-07 13:18:52 +03:00
|
|
|
void Init();
|
|
|
|
|
void UnInit();
|
|
|
|
|
|
2021-09-23 00:39:48 +03:00
|
|
|
std::optional<GUID> GetCurrentVirtualDesktopIdFromRegistry() const;
|
|
|
|
|
std::optional<std::vector<GUID>> GetVirtualDesktopIdsFromRegistry() const;
|
2021-07-07 13:18:52 +03:00
|
|
|
|
2021-08-26 20:47:27 +03:00
|
|
|
bool IsWindowOnCurrentDesktop(HWND window) const;
|
|
|
|
|
std::optional<GUID> GetDesktopId(HWND window) const;
|
2021-09-23 00:39:48 +03:00
|
|
|
std::optional<GUID> GetDesktopIdByTopLevelWindows() const;
|
|
|
|
|
|
|
|
|
|
std::vector<std::pair<HWND, GUID>> GetWindowsRelatedToDesktops() const;
|
2021-08-26 20:47:27 +03:00
|
|
|
|
2021-07-07 13:18:52 +03:00
|
|
|
private:
|
|
|
|
|
std::function<void()> m_vdInitCallback;
|
|
|
|
|
std::function<void()> m_vdUpdatedCallback;
|
|
|
|
|
|
|
|
|
|
IVirtualDesktopManager* m_vdManager;
|
|
|
|
|
|
|
|
|
|
OnThreadExecutor m_virtualDesktopTrackerThread;
|
|
|
|
|
wil::unique_handle m_terminateVirtualDesktopTrackerEvent;
|
|
|
|
|
|
2021-09-23 00:39:48 +03:00
|
|
|
std::optional<std::vector<GUID>> GetVirtualDesktopIdsFromRegistry(HKEY hKey) const;
|
2021-07-07 13:18:52 +03:00
|
|
|
void HandleVirtualDesktopUpdates();
|
|
|
|
|
};
|