Допустим, я создал новый рабочий стол с 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