mirror of
https://github.com/microsoft/PowerToys.git
synced 2024-12-12 02:09:24 +08:00
[FancyZones][Hotfix] Fix VirtualDesktopManager init (#14793)
This commit is contained in:
parent
287bc99a0f
commit
9d10426295
@ -12,31 +12,6 @@ namespace NonLocalizable
|
|||||||
const wchar_t RegKeyVirtualDesktopsFromSession[] = L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\SessionInfo\\%d\\VirtualDesktops";
|
const wchar_t RegKeyVirtualDesktopsFromSession[] = L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\SessionInfo\\%d\\VirtualDesktops";
|
||||||
}
|
}
|
||||||
|
|
||||||
const CLSID CLSID_ImmersiveShell = { 0xC2F03A33, 0x21F5, 0x47FA, 0xB4, 0xBB, 0x15, 0x63, 0x62, 0xA2, 0xF2, 0x39 };
|
|
||||||
|
|
||||||
IServiceProvider* GetServiceProvider()
|
|
||||||
{
|
|
||||||
IServiceProvider* provider{ nullptr };
|
|
||||||
if (FAILED(CoCreateInstance(CLSID_ImmersiveShell, nullptr, CLSCTX_LOCAL_SERVER, __uuidof(provider), (PVOID*)&provider)))
|
|
||||||
{
|
|
||||||
Logger::error("Failed to get ServiceProvider for VirtualDesktopManager");
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
return provider;
|
|
||||||
}
|
|
||||||
|
|
||||||
IVirtualDesktopManager* GetVirtualDesktopManager()
|
|
||||||
{
|
|
||||||
IVirtualDesktopManager* manager{ nullptr };
|
|
||||||
IServiceProvider* serviceProvider = GetServiceProvider();
|
|
||||||
if (serviceProvider == nullptr || FAILED(serviceProvider->QueryService(__uuidof(manager), &manager)))
|
|
||||||
{
|
|
||||||
Logger::error("Failed to get VirtualDesktopManager");
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
return manager;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::optional<GUID> NewGetCurrentDesktopId()
|
std::optional<GUID> NewGetCurrentDesktopId()
|
||||||
{
|
{
|
||||||
wil::unique_hkey key{};
|
wil::unique_hkey key{};
|
||||||
@ -99,9 +74,21 @@ HKEY GetVirtualDesktopsRegKey()
|
|||||||
|
|
||||||
VirtualDesktop::VirtualDesktop(const std::function<void()>& vdInitCallback, const std::function<void()>& vdUpdatedCallback) :
|
VirtualDesktop::VirtualDesktop(const std::function<void()>& vdInitCallback, const std::function<void()>& vdUpdatedCallback) :
|
||||||
m_vdInitCallback(vdInitCallback),
|
m_vdInitCallback(vdInitCallback),
|
||||||
m_vdUpdatedCallback(vdUpdatedCallback),
|
m_vdUpdatedCallback(vdUpdatedCallback)
|
||||||
m_vdManager(GetVirtualDesktopManager())
|
|
||||||
{
|
{
|
||||||
|
auto res = CoCreateInstance(CLSID_VirtualDesktopManager, nullptr, CLSCTX_ALL, IID_PPV_ARGS(&m_vdManager));
|
||||||
|
if (FAILED(res))
|
||||||
|
{
|
||||||
|
Logger::error("Failed to create VirtualDesktopManager instance");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
VirtualDesktop::~VirtualDesktop()
|
||||||
|
{
|
||||||
|
if (m_vdManager)
|
||||||
|
{
|
||||||
|
m_vdManager->Release();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void VirtualDesktop::Init()
|
void VirtualDesktop::Init()
|
||||||
@ -203,7 +190,7 @@ std::optional<GUID> VirtualDesktop::GetDesktopId(HWND window) const
|
|||||||
{
|
{
|
||||||
GUID id;
|
GUID id;
|
||||||
BOOL isWindowOnCurrentDesktop = false;
|
BOOL isWindowOnCurrentDesktop = false;
|
||||||
if (m_vdManager->IsWindowOnCurrentVirtualDesktop(window, &isWindowOnCurrentDesktop) == S_OK && isWindowOnCurrentDesktop)
|
if (m_vdManager && m_vdManager->IsWindowOnCurrentVirtualDesktop(window, &isWindowOnCurrentDesktop) == S_OK && isWindowOnCurrentDesktop)
|
||||||
{
|
{
|
||||||
// Filter windows such as Windows Start Menu, Task Switcher, etc.
|
// Filter windows such as Windows Start Menu, Task Switcher, etc.
|
||||||
if (m_vdManager->GetWindowDesktopId(window, &id) == S_OK && id != GUID_NULL)
|
if (m_vdManager->GetWindowDesktopId(window, &id) == S_OK && id != GUID_NULL)
|
||||||
|
@ -7,7 +7,7 @@ class VirtualDesktop
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
VirtualDesktop(const std::function<void()>& vdInitCallback, const std::function<void()>& vdUpdatedCallback);
|
VirtualDesktop(const std::function<void()>& vdInitCallback, const std::function<void()>& vdUpdatedCallback);
|
||||||
~VirtualDesktop() = default;
|
~VirtualDesktop();
|
||||||
|
|
||||||
inline bool IsVirtualDesktopIdSavedInRegistry(GUID id) const
|
inline bool IsVirtualDesktopIdSavedInRegistry(GUID id) const
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user