gpt4 book ai didi

c# - 跨多个 Windows 10 虚拟桌面的持久窗口?

转载 作者:可可西里 更新时间:2023-11-01 11:26:45 26 4
gpt4 key购买 nike

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

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

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

GetWindowsDesktopId()
IsWindowOnCurrentVirtualDesktop()
MoveWindowToDesktop()

有办法吗?

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

最佳答案

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

关于c# - 跨多个 Windows 10 虚拟桌面的持久窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33548454/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com