How to move a window between desktops using powershell/.net on windows 10 How to move a window between desktops using powershell/.net on windows 10 powershell powershell

How to move a window between desktops using powershell/.net on windows 10


The Windows SDK Support Team Blog posted a C# demo to switch Desktops via 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);        }    }}

Call GetWindowDesktopId to get the Desktop GUID and later call MoveWindowToDesktop with the GUID and a handle to your Window to move it t the vitual desktop.