您所指的功能更正式地称为“虚拟桌面”。然而,它被设计为
用户管理的
功能,因此应用程序对其的支持非常有限:
Virtual desktops are an end-user window management feature, not a programmatic one
虚拟桌面是一种窗口管理功能,而不是安全功能或性能功能。此外,它们是供最终用户组织窗口的,而不是供其他程序组织窗口的。
IVirtualDesktopManager接口的目的是允许应用程序在少数应用程序场景中考虑虚拟机状态。
也就是说
IVirtualDesktopManager
接口确实有
GetWindowDesktopId()
方法:
获取承载所提供的顶级窗口的虚拟机的标识符。
几乎是唯一的
公务的
使用该id可以将其他窗口移动到同一桌面,方法是使用
IVirtualDesktopManager::MoveWindowToDesktop()
:
将窗口移动到指定的虚拟机。
如上述文章所述:
IVirtualDesktopManager界面旨在涵盖的另一个场景是由多个共同操作的窗口组成的应用程序,如主窗口和一堆辅助窗口。虚拟机管理器已经识别出许多类型的辅助窗口,并自动将它们与主窗口保持在同一虚拟机上。但是应用程序可能具有不寻常的窗口结构,无法进行这种自动检测。
对于这些情况,您可以为主窗口调用IVirtualDesktopManager::GetWindowDesktopId以获取其当前虚拟机的ID,然后使用IVirtual DesktopManager:MoveWindowsToDesktop将辅助窗口移动到同一虚拟机。
MoveWindowsToDesktop的目的特别是不让程序抓取所有用户窗口并将其分散在所有虚拟桌面上。例如,请注意,您唯一能做的就是使一个窗口加入另一个窗口虚拟桌面。你可以把窗口放在一起,但不能把一个窗口拆分成一个新的虚拟桌面。
因为重点是让你移动辅助窗口,使它们跟随主窗口。它不是用于将窗口移动到任意虚拟桌面上的通用接口。这是由用户来做的。
话虽如此,有一个
无证件的
IVirtualDesktopManagerInternal
可以执行更多操作的接口,如枚举虚拟机、创建/删除虚拟机、在虚拟机之间切换等,但除非绝对需要,否则应避免使用该接口。