跨多个窗口10个虚拟桌面的Perisistant窗口?

时间:2015-11-05 15:24:19

标签: c# wpf windows virtual-desktop

我有多个窗口的C#WPF程序。我已经添加了对Windows 10桌面的支持,但用户希望在桌面之间移动时,有些窗口会保留在屏幕上。

例如,如果在第一个桌面上打开了窗口A并且它们翻转到第二个桌面,则他们希望窗口A保留在新桌面上的相同位置。

我唯一知道的功能来自VirtualDesktopManager:

GetWindowsDesktopId()
IsWindowOnCurrentVirtualDesktop()
MoveWindowToDesktop()

有办法做到这一点吗?

还有办法检测桌面翻转何时启动?因为如果是这样我总是可以调用IsWindowOnCurrentVirtualDesktop(),如果答案是否定的,我可以调用MoveWindowToDesktop()将它放在那里。看起来有点像黑客,但如果我有办法检测桌面更改,就可以完成工作。

1 个答案:

答案 0 :(得分:3)

您可以检测虚拟桌面更改,找到一个很好的GitHub项目,其中包含必要的代码以及更多处理Windows 10中虚拟桌面的功能。

Virtual Desktop GitHub

要获取事件并模拟停留在每个桌面上的窗口,您可以执行以下操作。

VirtualDesktop.CurrentChanged += (o, e) =>
{
    this.Dispatcher.Invoke(() =>
    {
        var h = new WindowInteropHelper(this).Handle;

        if (!VirtualDesktopHelper.IsCurrentVirtualDesktop(h))
        {
            this.MoveToDesktop(VirtualDesktop.Current);
        }
    });
};

Dispatcher.Invoke是必需的,因为事件与UI不同,因此调用必须封送到UI线程。