关于 Windows 10 及其新的虚拟桌面功能,有没有办法确定特定窗口属于哪个虚拟桌面?而且,哪个虚拟桌面处于活动状态?
可以使用Snipping Tool看到问题。打开工具并选择一个New / Window Snip。当您移动鼠标时,截图工具会突出显示没有窗口的区域,但在另一个虚拟桌面上的该位置有一个窗口。
截图工具不知道特定窗口在哪个虚拟桌面上。
这是 MSDN 论坛上的相同问题,没有答案,但有很多额外的细节。
抱歉,我的状态不够高,无法插入图片或包含更多链接。
关于 Windows 10 及其新的虚拟桌面功能,有没有办法确定特定窗口属于哪个虚拟桌面?而且,哪个虚拟桌面处于活动状态?
可以使用Snipping Tool看到问题。打开工具并选择一个New / Window Snip。当您移动鼠标时,截图工具会突出显示没有窗口的区域,但在另一个虚拟桌面上的该位置有一个窗口。
截图工具不知道特定窗口在哪个虚拟桌面上。
这是 MSDN 论坛上的相同问题,没有答案,但有很多额外的细节。
抱歉,我的状态不够高,无法插入图片或包含更多链接。
Windows SDK 支持团队博客发布了一个C # 演示以通过IVirtualDesktopManager切换桌面:
[ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("a5cd92ff-29be-454c-8d04-d82879fb3f1b")]
[System.Security.SuppressUnmanagedCodeSecurity]
public interface IVirtualDesktopManager
{
[PreserveSig]
int IsWindowOnCurrentVirtualDesktop(
[In] IntPtr TopLevelWindow,
[Out] out int OnCurrentDesktop
);
[PreserveSig]
int GetWindowDesktopId(
[In] IntPtr TopLevelWindow,
[Out] out Guid CurrentDesktop
);
[PreserveSig]
int MoveWindowToDesktop(
[In] IntPtr TopLevelWindow,
[MarshalAs(UnmanagedType.LPStruct)]
[In]Guid CurrentDesktop
);
}
[ComImport, Guid("aa509086-5ca9-4c25-8f95-589d3c07b48a")]
public class CVirtualDesktopManager
{
}
public class VirtualDesktopManager
{
public VirtualDesktopManager()
{
cmanager = new CVirtualDesktopManager();
manager = (IVirtualDesktopManager)cmanager;
}
~VirtualDesktopManager()
{
manager = null;
cmanager = null;
}
private CVirtualDesktopManager cmanager = null;
private IVirtualDesktopManager manager;
public bool IsWindowOnCurrentVirtualDesktop(IntPtr TopLevelWindow)
{
int result;
int hr;
if ((hr = manager.IsWindowOnCurrentVirtualDesktop(TopLevelWindow, out result)) != 0)
{
Marshal.ThrowExceptionForHR(hr);
}
return result != 0;
}
public Guid GetWindowDesktopId(IntPtr TopLevelWindow)
{
Guid result;
int hr;
if ((hr = manager.GetWindowDesktopId(TopLevelWindow, out result)) != 0)
{
Marshal.ThrowExceptionForHR(hr);
}
return result;
}
public void MoveWindowToDesktop(IntPtr TopLevelWindow, Guid CurrentDesktop)
{
int hr;
if ((hr = manager.MoveWindowToDesktop(TopLevelWindow, CurrentDesktop)) != 0)
{
Marshal.ThrowExceptionForHR(hr);
}
}
}
调用GetWindowDesktopId
以获取桌面 GUID。