zl程序教程

您现在的位置是:首页 >  其它

当前栏目

判断窗口是否在当前虚拟桌面

判断 是否 当前 窗口 桌面 虚拟
2023-06-13 09:17:28 时间

最近项目中需要判断窗口是否在当前虚拟桌面的需求(Windows平台)。在网上找到了下面的方法,亲测可以实现,分享给大家。如果你有更好的方法,请在留言区分享吧。

IVirtualDesktopManager实例的IsWindowOnCurrentVirtualDesktop提供窗口是否在当前活动的虚拟桌面上。

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();
}
  • 代码出处链接: https://stackoverflow.com/questions/40196874/how-to-use-the-ivirtualdesktopmanager-interface-in-c-win32
  • IVirtualDesktopManager官方文档: https://docs.microsoft.com/zh-cn/windows/win32/api/shobjidl_core/nn-shobjidl_core-ivirtualdesktopmanager?redirectedfrom=MSDN