Jan*_*öhm 1 c++ winapi virtual-desktop windows-10-desktop
我需要从Win32中搜索最大化的窗口(通过使用EnumWindows),但我也想过滤当前虚拟桌面上的窗口.在MSDN上,我找到了一个关于IVirtualDesktopManager界面的页面,但似乎没有关于如何使用此界面的信息.
IVirtualDesktopManager::IsWindowOnCurrentVirtualDesktop(/*args...*/);
Run Code Online (Sandbox Code Playgroud)
引发以下错误:
非静态成员引用必须相对于特定对象
VirtualDesktopManager mVirtualDeskManager;
mVirtualDesktopManager.IsWindowOnCurrentVirtualDesktop(/args...*/)
Run Code Online (Sandbox Code Playgroud)
抛出此错误:
不允许使用不完整的类型
我只找到了IVirtualDesktopManager在C#中使用接口的解决方案.
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();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
981 次 |
| 最近记录: |