winapi — Как использовать интерфейс IVirtualDesktopManager в C ++ / Win32

Мне нужно искать развернутые окна из Win32 (с помощью EnumWindows) но я также хочу отфильтровать окна, которые находятся на текущем виртуальном рабочем столе. На MSDN я нашел страницу о IVirtualDesktopManager интерфейс но, похоже, нет информации о том, как использовать этот интерфейс.

IVirtualDesktopManager::IsWindowOnCurrentVirtualDesktop(/*args...*/);

Выдает следующую ошибку:

Нестатическая ссылка на член должна относиться к определенному объекту

VirtualDesktopManager mVirtualDeskManager;
mVirtualDesktopManager.IsWindowOnCurrentVirtualDesktop(/args...*/)

Выдает эту ошибку:

Неполный тип не допускается

Я нашел только решения по использованию IVirtualDesktopManager Интерфейса в C # пока нет.

0

Решение

IVirtualDesktopManager это интерфейс COM Вам нужно создать экземпляр объекта COM, который реализует интерфейс.

На основе кода из этот блог, ты можешь использовать IServiceProvider чтобы получить доступ IVirtualDesktopManager (а также IVirtualDesktopManagerInternal, который имеет гораздо больше функциональности, чем IVirtualDesktopManager имеет), например:

IServiceProvider* pServiceProvider = NULL;
HRESULT hr = ::CoCreateInstance(
CLSID_ImmersiveShell, NULL, CLSCTX_LOCAL_SERVER,
__uuidof(IServiceProvider), (PVOID*)&pServiceProvider);

if (SUCCEEDED(hr))
{
IVirtualDesktopManager *pDesktopManager = NULL;
hr = pServiceProvider->QueryService(__uuidof(IVirtualDesktopManager), &pDesktopManager);

if (SUCCEEDED(hr))
{
BOOL bIsOnCurrentDesktop = FALSE;
hr = pDesktopManager->IsWindowOnCurrentVirtualDesktop(hWnd, &bIsOnCurrentDesktop);

if (SUCCEEDED(hr))
{
// use bIsOnCurrentDesktop as needed...
}

pDesktopManager->Release();
}

pServiceProvider->Release();
}
5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]