Как получить IVirtualDesktop для текущей темы рабочего стола - PullRequest
0 голосов
/ 25 февраля 2020

Допустим, я создал новый рабочий стол с CreateDesktopExW. Моя цель - получить IVirtualDesktop для этого рабочего стола, используя функцию GetCurrentDesktop из интерфейса IVirtualDesktopManagerInternal.

Предположим, следующий код

HDESK new_desktop = CreateDesktopExA("blt_engine_backbuffer", 0, 0, 
    DF_ALLOWOTHERACCOUNTHOOK, MAXIMUM_ALLOWED, 0, 4096, false);

HDESK original_desktop = OpenInputDesktop(0, 0, GENERIC_ALL);

SetThreadDesktop(new_desktop);

IServiceProvider* service_provider_ptr = 0;
CoCreateInstance(CLSID_ImmersiveShell, 0, CLSCTX_LOCAL_SERVER,
    __uuidof(IServiceProvider), (void**) &service_provider_ptr);

IVirtualDesktopManagerInternal* virtual_desktop_interface = 0;
service_provider_ptr->QueryService(CLSID_VirtualDesktopManagerInternal,
    __uuidof(IVirtualDesktopManagerInternal), (void**) &virtual_desktop_interface);

IVirtualDesktop* new_desktop_workspace = 0;
virtual_desktop_interface->GetCurrentDesktop(&new_desktop_workspace);

virtual_desktop_interface->Release();
service_provider_ptr->Release();

SetThreadDesktop(original_desktop);

Используя SetThreadDesktop, я я пытаюсь изменить процесс рабочего стола, чтобы он распознал вновь созданный рабочий стол. К сожалению, он получает только текущий активный рабочий стол. Как я могу выполнить sh это?

@ RbMm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...