2

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

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

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

GetWindowsDesktopId()
IsWindowOnCurrentVirtualDesktop()
MoveWindowToDesktop()

有没有办法做到这一点?

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

4

1 回答 1

3

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

虚拟桌面 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 线程。

于 2015-11-06T17:22:05.847 回答