【问题标题】:Persistent window across multiple windows 10 virtual desktops?跨多个 Windows 10 虚拟桌面的持久窗口?
【发布时间】:2015-11-05 15:24:19
【问题描述】:

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

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

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

GetWindowsDesktopId()
IsWindowOnCurrentVirtualDesktop()
MoveWindowToDesktop()

有没有办法做到这一点?

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

【问题讨论】:

    标签: c# wpf windows virtual-desktop


    【解决方案1】:

    您可以检测到虚拟桌面的变化,找到一个不错的 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 线程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-14
      • 2016-01-26
      • 2015-11-09
      • 1970-01-01
      • 1970-01-01
      • 2021-11-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多