重新连接外接显示器时,如何将窗口恢复到其原始屏幕?

重新连接外接显示器时,如何将窗口恢复到其原始屏幕?

想象一下你这样做...

  1. 连接外接显示器。
  2. 启动一些应用程序,每个显示器上各启动一些。
  3. 断开外接显示器。
    • 一切都很好,因为所有应用程序都会移动主显示器。
  4. 重新连接外接显示器。
    • 应用程序保留在主显示器上,但如果它们能移回之前所在的外部显示器就更好了。

使用 Windows 10。有什么解决方案或解决方法可以将应用程序自动移回外部显示器吗?

答案1

温雷德科克对我来说效果最好。Redock 是自动的 - 无需任何干预即可保存和恢复窗口。太神奇了!它也是开源的!

答案2

我过去曾使用过一个名为 Windowpad 的 Autohotkey 工具来实现这一点。显然,现在它已被一个名为 的新增强版本所取代WindowPadX。向下滚动查看自述文件。完整文档是这里

这对我来说在多显示器上至关重要。我喜欢能够轻松地在两个显示器之间切换窗口。

您可以为以下内容设置热键(来自自述文件):

热键上可配置的操作

窗口操作

多显示器

WPXA_MoveWindowToMonitor:在屏幕之间移动窗口,保持相对位置和大小。

WPXA_MinimizeWindowsOnMonitor:最小化给定屏幕上的所有窗口

WPXA_GatherWindowsOnMonitor:“聚集”特定屏幕上的窗口。

WPXA_FillVirtualScreen:扩大窗口以填充虚拟屏幕(所有显示器)。

一般的

WPXA_MaximizeToggle:最大化或恢复窗口。

WPXA_TopToggle:针对给定窗口切换“AlwaysOnTop”

WPXA_RollToggle:切换给定窗口的“滚动/展开”WPXA_Move:根据“pad”概念移动和调整窗口大小。

WPXA_TileLast2Windows:平铺活动窗口和最后一个窗口

多显示器鼠标操作

WPXA_MoveMouseToMonitor:将鼠标移动到指定显示器的中心

WPXA_ClipCursorToCurrentMonitorToggle:将鼠标剪辑到当前显示器

WPXA_ClipCursorToMonitor:将鼠标剪辑(限制)到给定的显示器

常规鼠标操作

WPXA_MouseLocator:轻松找到鼠标

您可以在“精选的 AutoHotkey 库、库分发、脚本、工具和资源列表”中找到它和其他工具这里

答案3

您可以执行下列操作之一:

场景 1:断开外部显示器连接时(从 Windows 11 开始)。使用 ALT+TAB 选择可视代码窗口,然后按 Windows 按钮 + Shift 以及左箭头键或右箭头键,在显示器/桌面之间“移动”活动应用程序。

场景 2:断开外部显示器时,使用 ALT+TAB 选择 V​​isual Code App,然后按 ALT+SPACEBAR,再按 R 恢复应用程序,然后您可以再次使用 ALT+SPACEBAR 并选择 X 以最大化当前显示或者您只需使用鼠标“弹出”的窗口即可。

场景 3:(如果选项未被禁用)当您断开外部显示器并使用 ALT+TAB 选择 V​​isual Code 应用程序并按 ALT+SPACEBAR 并选择 M 以使用箭头键将窗口移动到您的显示屏时。

我已经尝试了所有选项。第一种方案对于在显示屏之间快速移动应用程序特别有用,尤其是在缺少该选项的情况下。第二种方案是我最常用的,因为第一种是我最近学到的新键,所以我还不习惯使用该组合。第三种方案很少可用,所以我只是在研究与 Visual Code 相同的问题时才想到它的。

希望这些选项可以帮助遇到同样问题的人。这应该适用于任何应用程序,因为我在 Visual Code 应用程序中遇到过很多这样的问题。

答案4

Windows 程序(现在称为应用程序)可以将其窗口的位置保存在文件或注册表中。如果知道这些数据在哪里,则可以在记事本或注册表编辑器中手动编辑这些数据。(错误的注册表项可能会导致 Windows 不稳定或出现错误)

对于具有一点编码技能的人来说,创建自动化方法应该很容易,并且可以根据需要启动(即在重新连接显示器后)。这可以通过操作脚本、.bat 文件或本机应用程序来完成。

不过,为了让所需的职位得以实施,需要在此之前关闭相关申请。

另一种具有“在线”功能(无需重新启动应用程序)的可能性是,如果 Windows 允许一个进程访问另一个进程的窗口。一种方法可能是 SendMessage 和 WindowProc 函数。

(目前我不确定这是否仅适用于父应用程序的线程,或者也可以由其他应用程序的线程完成...当然需要具备良好的 Windows 编程知识)

https://msdn.microsoft.com/en-us/library/windows/desktop/ms644950%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396

将指定的消息发送到一个或多个窗口。[...] 如果指定的窗口是由调用线程创建的,则窗口过程将立即作为子例程调用。如果指定的窗口是由其他线程创建的,则系统将切换到该线程并调用相应的窗口过程。

WM_Move 消息 https://docs.microsoft.com/en-us/windows/desktop/winmsg/wm-move

窗口移动后发送。

窗口通过其 WindowProc 函数接收该消息。

https://msdn.microsoft.com/en-us/library/ms633573%28v=VS.85%29.aspx?f=255&MSPPError=-2147217396

处理发送到窗口的消息的应用程序定义的函数。[...]

相关内容