API for Windows 10 virtual desktops

后端 未结 3 718
一整个雨季
一整个雨季 2020-12-07 13:41

Is there any way to enumerate, switch, add virtual desktops and move window between desktops from code? Preferably, WinAPI.

3条回答
  •  执念已碎
    2020-12-07 14:24

    There is this guy that made a application to map keyboard shorcut to move a window between virtual desktop. https://github.com/Grabacr07/SylphyHorn (I use it every day )

    He has a blog where he explain what he did http://grabacr.net/archives/5701 ( you can use google translate it is in japanese)

    He in fact used the same api mantionned in the Alberto Tostado response. http://www.cyberforum.ru/blogs/105416/blog3671.html and the api can be found on his github https://github.com/Grabacr07/VirtualDesktop

    The api is really simple to use BUT it seems impossible to move a window from another process.

    public static bool MoveToDesktop(IntPtr hWnd, VirtualDesktop virtualDesktop)
        {
            ThrowIfNotSupported();
    
            int processId;
            NativeMethods.GetWindowThreadProcessId(hWnd, out processId);
    
            if (Process.GetCurrentProcess().Id == processId)  // THAT LINE
            {
                var guid = virtualDesktop.Id;
                VirtualDesktop.ComManager.MoveWindowToDesktop(hWnd, ref guid);
                return true;
            }
    
            return false;
        }
    

    To workaround this problem they made another implementation that they use alongside the one in the russian blog

    if (VirtualDesktopHelper.MoveToDesktop(hWnd, right) //<- the one in the russian blog
                        || this.helper.MoveWindowToDesktop(hWnd, right.Id)) <- the second implementation
    

    The second implementation can be found here: https://github.com/tmyt/VDMHelper This one can move a window from another process to another desktop. BUT it is buggy right now. For exemple when i try to move some window like google chrome it crash.

    So this is the result of my research. I m rigth now trying to make a StickyWindow feature with these api.

提交回复
热议问题