Windows 的一大新功能是它现在原生支持多个“虚拟”桌面,让您可以将多个窗口集合在一起并区分任务组。
这很好。
您可以通过单击“任务”按钮,然后右键单击应用程序窗口并选择“移动到......”在桌面之间移动窗口。
这有点笨重而且不太好。
我有两个显示器,经常喜欢在第二台显示器上播放电影,无论是在网络浏览器还是媒体播放器中,而主屏幕上则有一个浏览器和其他一些应用程序。在我当前的设置中,这样做不是问题,它就是有效。
随着虚拟桌面的出现,我希望将浏览器放在一个虚拟桌面上,将另一个应用程序放在另一个虚拟桌面上,这样在切换桌面时仍然能够观看视频,从而有效地让视频在两个都虚拟桌面。使用默认的电影和电视应用程序播放视频,然后移动到另一个桌面只会导致视频停止,没有任何警告。
不是很好。
我希望的是这两个显示器要么有自己的虚拟桌面,要么有“固定到所有桌面”选项,类似于我在许多基于 Linux 的窗口管理器中看到的“粘性窗口”功能。
有没有什么方法可以实现这个目的?
答案1
该功能现已发布,作为“虚拟桌面改进”在里面Windows 10 周年更新(内部版本 14316):
您现在可以固定窗口,以便该窗口在每个桌面上都可用。为此,请启动任务视图,然后右键单击要固定的窗口并选择“在所有桌面上显示此窗口”。尝试固定 Skype 或 Groove Music,以便它们始终触手可及。如果您有多显示器设置,您可能会喜欢将电子邮件应用程序放在第二台显示器上,无论您切换到哪个桌面。
答案2
是的。[几乎:)] 每个具有 WS_EX_TOOLWINDOW 属性的窗口在所有桌面上都可见。
Autohotkey 在这方面有很大帮助。示例脚本 - MyLoop.ahk:
WS_EX_TOOLWINDOW := 0x00000080 环形 { WinSet,ExStyle,+%WS_EX_TOOLWINDOW%,ahk_class Chrome_WidgetWin_1 睡眠,100 }
在 Windows 启动时放入此功能,Google Chrome 窗口就会“粘贴”到所有虚拟桌面。
或者将其指定为热键:示例脚本 - MyHotkeys.ahk:
WS_EX_TOOLWINDOW := 0x00000080 +MButton::WinSet,ExStyle,^%WS_EX_TOOLWINDOW%,A ^MButton::WinSet,AlwaysOnTop,切换,A
将其放在 Windows 启动中,您可以通过按 Shift + 鼠标中键单击任何窗口来切换“粘性”状态。
加法键 - Ctrl+鼠标中键单击将切换至“最顶部”状态。非常有用。
PS:现代应用程序(例如 Windows 10 计算器)不知何故忽略了这一点。不知道为什么。但对于 Windows 资源管理器窗口和大多数“旧应用程序”来说 - 它工作正常
答案3
根据上面的@idj 解决方案,以下是在 C 中执行的方法:
exstyle = GetWindowLongPtr(hwndPtr, GWL_EXSTYLE);
exstyle |= WS_EX_TOOLWINDOW
SetWindowLongPtr(hwndPtr, GWL_EXSTYLE, exstyle);