如何检索已移至“屏幕外”的窗口


49

有时我的双屏设置会出现此问题,尤其是在我忙于处理很多事情时。

有时候,我似乎能够完全在屏幕外移动窗口(我不太确定如何移动),而且无法将其恢复。如果我在应用程序的菜单中执行“全部隐藏”(通常是Mail.app,那么让我们坚持使用该示例),所有内容都会消失,Mail似乎认为Windows菜单中有一个“收件箱”窗口,但是没有可见的东西。关闭并重新启动该应用程序似乎无济于事(因为该应用程序有助于记忆我以前的窗口在哪里),最后我要做的就是关闭Mac,拔下第二台显示器并重新启动,然后再次打开该应用程序,似乎是说服Mac重新考虑主窗口的位置,一切都很好。然后,我可以重新启动第二台监视器,依此类推。

有没有更好的办法?是否有某种方法可以将窗口编组回特定的监视器,或者用于移动“打开” /正在运行的窗口的实用程序?我实际上在做错什么吗?:-)

顺便说一句,我没有使用空格-所以我很确定这不是一些奇怪的空格问题。:-)

Answers:


43

Chealion在SuperUser上回答了这个问题

我不会在此处复制和粘贴他的答案,因为他得到的不是我,而是我的信誉。

但基本上,您可以做的是(引用Chealion的答案):

排列Windows以便可以看到它们的第二种方法(如果由于某种原因它们不在屏幕上)是更改为拥有相关窗口的应用程序,按住Option键,然后从中选择“排列在前面”窗口菜单。然后,它将从屏幕左上方开始以级联方式排列该应用程序的所有窗口。


哦,太好了-谢谢!我赞成他的回答,并在此感谢您将我指向正确的地方。那里有一些好的建议,我几乎等不及现在再出现该问题。:-)
robsoft

3
此解决方案在优胜美地中不起作用,您只能从优胜美地中打开窗口的显示中访问“窗口”菜单。
ShemSeger 2015年

5
XQuartz不显示菜单选项
Mead

从MacOS 10.13.5起,Apple似乎已删除了此功能。这几乎就像能够将移出屏幕的窗口视为一个错误,而不是将它们移出屏幕的事实一样。
扔掉帐户

15

为了完整性:

从我最初在Server Fault Question 7237的回答中得出:

拔下显示器时(包括适配器(如果适用)-使适配器离开OS X并认为仍在插入显示器),所有Windows都应移至主屏幕上。有时,某些窗口(例如Firefox)将保持其位置在屏幕的最右边,从而为您提供了足够的空间来抓住标题栏并将其移动到您想要的位置。

一种方法是,在拔下外接显示器之前(或在拔出加密狗之前)是在“系统偏好设置”中打开“显示首选项”窗格,然后单击“收集Windows”按钮。这应该会在主屏幕上显示每个窗口,并且如果您没有插入第二个监视器,则该选项不会出现。

排列Windows以便可以看到它们的第二种方法(如果由于某种原因它们不在屏幕上)是更改为拥有相关窗口的应用程序,按住Option键,然后从中选择“排列在前面”窗口菜单。然后,它将从屏幕左上方开始以级联方式排列该应用程序的所有窗口。

最后,有几个可用的AppleScript(例如Snipplr的一个),它们也将每个窗口移出屏幕并在屏幕上为您移动。

还有一个漂亮的共享软件应用程序,叫做Stay,可以帮助您自动执行很多操作,还有MarcoPolo,它不仅可以监控监视器是否断开连接并允许您运行脚本(如果您想不仅仅是重新布置窗户而已。


11

我认为我应该对此做出回答,以描述专门针对XQuartz的解决方案。这里的许多解决方案不适用于XQuartz。从这张票上:https : //xquartz.macosforge.org/trac/ticket/796,我发现了两个可行的解决方案,我觉得在这里陈述它们将是有益的。

  1. 如果您可以轻松地拔出/插入显示器,请拔下显示器的电源,以便您的窗口出现在您可以访问的位置。然后,用鼠标单击窗口并按住鼠标按钮,就像要拖动它一样。在不松开鼠标或窗口的情况下,插入显示器。XQuartz窗口应保持在鼠标所在的位置。

  2. 此ShiftIt软件包非常适合使窗口消失在屏幕外:https : //github.com/fikovnik/ShiftIt/downloads 可能还有其他类似的软件包,但这是干净有效的。

希望这对某人有帮助!


Shiftlt几乎可以与XQuartz一起使用。实际上,它使(例如)Inkscape的主窗口重新居中,而不是辅助窗口(属性对话框)居中。但是,这是一个不错的工具。+1
lauhub

6

我有两个屏幕,加载Inkscape通常会将其放置在无法访问的地方。我可以使用“显示所有窗口”来查看它,但是如果我从那里选择它,它将消失。我找到的解决方案来自此邮件列表评论

拔下第二个屏幕时,我可以看到Inkscape。但是即使将其稍微移动一下,如果我重新插入另一个屏幕,它也会再次从边缘消失。解决方案是:

  1. 拔下第二个屏幕
  2. 使用鼠标握住窗口的标题栏(单击并按住)
  3. 仍然按住标题栏的同时,将显示器重新插入

我还要补充说,在执行此任务时,我得到了办公室其他人的很多关注。
2013年

4

我找到了一个非常简单的解决方案。

在Powerpoint上发生在我身上。我转到了屏幕顶部的Powerpoint菜单。单击“窗口”,然后单击“缩放窗口”。完成了


这是适用于10.11.5(代号El Capitan)的唯一答案。
pzulw

另外,“窗口”>“缩放”仅对我有用(“窗口”中的“缩放”不是一个选项)。
Thomas McCabe

3

我尝试过的对我有用的方法是将分辨率切换到较低的分辨率,然后再将其恢复。它只是神奇地将应用程序置于中心位置。干杯。


3

我找到了这个应用程序:WindowWrangler

它允许使用键盘快捷键来移动窗口。

不幸的是,它不适用于我唯一需要的窗口:XQuartz环境中的Inkscape。


2
您找到xquartz的任何解决方案了吗?
gebirgsbärbel

我发现的解决方案是连接外部监视器:在这种情况下,更改的窗口是我可以移动的位置。我将其移动,以便在断开屏幕连接后,窗口顶部栏“可访问”。
lauhub 2014年

@gebirgsbärbel请参阅下面我刚刚发布的答案。我认为您可能会发现它很有用。
nukeguy 2015年

@gebirgsbärbel参见[新答案](apple.stackexchange.com/a/238975/31154)我在下面使用xdotool实用程序发布了,终于解决了我所有的问题
lauhub

3

对于特定的X11 / XQuartz问题,这是我找到的解决方案。

前提条件

首先,您将需要xdotool。可以使用安装brew install xdotool

基础

您可以使用以下脚本将窗口向左移动:

xdotool getactivewindow windowmove --relative -- -100 -44

我相信-44是标题栏高度和菜单栏高度的总和。如果未在此处设置,则窗口将关闭而不是保持y位置。

正确的举动:

xdotool getactivewindow windowmove --relative -- 100 -44

向上移动:

xdotool getactivewindow windowmove --relative -- x -100

向下移动:

xdotool getactivewindow windowmove --relative -- x 100

因此,现在,您可以移动当前选择的窗口(如果它不在屏幕上,则可以通过单击“曝光”来访问它)。

公开视图

然后,您可以打开终端并重复命令,直到出现窗口。

通过快捷方式访问

要使用键盘快捷键移动窗口,可以使用此处给出说明

我实际上是使用BetterTouchTool添加了这些快捷方式。

  1. BetterTouchPreferences>键盘
  2. 添加新的快捷方式
  3. 选择键盘快捷方式文本字段,然后按(例如)shift+ ^+ cmd+
  4. 选择触发器预定义操作控制其他应用程序>执行终端命令
  5. 输入命令(例如)并使用xdotool的完整路径进行右移(您可以使用which xdotool命令获取它)

    /usr/local/bin/xdotool getactivewindow windowmove --relative -- 100 -44

  6. 点击保存按钮。

重复相同的其他方向,享受吧!


芬克没有xdotool
Mei

2

另外,为完整起见,我遇到了这个问题:尽管我还没有尝试或购买过Mac版Stay app

从他们的网站:

Stay可以为您在计算机上使用的每种显示组合存储一组窗口。例如,如果您有一台有时连接到外接显示器的笔记本电脑,则可以在Stay中存储两组窗口;一台与外接显示器相连,另一台不与外接显示器相连。完成此操作后,无论何时连接或断开外接显示器,都可以通过保持还原窗口来确保窗口始终位于您希望的位置。甚至可以将Stay配置为在显示器连接和断开时自动还原窗口。


2

我有一个对我有用的解决方案,并且我搜寻了论坛并尝试了所有可能的方法。

最后我找到了一种方法。安装一个名为BetterTouchTool的应用程序。这使您可以创建快捷方式来在屏幕等上做各种方便的事情。然后设置应用程序特定的快捷方式(比听起来容易得多),并使其变得简单。我将其设置为使“两根手指向上滑动”导致“最大化窗口”操作。这将丢失的应用程序粘贴到了我的笔记本电脑屏幕上,并远离了原来被粘贴的幻像监视器屏幕。

问题解决了。

这是设置快捷方式时BetterTouchTool外观的图像:

BetterTouchTool快捷方式


我还使用BetterTouchTool解决了该问题。
Eugenio

2

我在Mavericks中遇到了同样的问题,我设法按照以下步骤解决了这个问题:

  1. 将指针移到移出屏幕的窗口的边缘,例如右侧的边缘。
  2. 当您看到调整大小图标(在我的情况下为水平调整大小图标)时,单击并按住。
  3. 在“按住点击”的同时拖动窗口。瞧!

仅当窗口靠着另一个窗口的边缘时,此方法才有效
Mei


2

在El Capitan中,这里的简单答案对我不起作用或不可用。起作用的是右键单击Dock中的应用程序(在我的情况下为Chrome),然后选择“选项”>“在显示1上分配给桌面”。这会将所有窗口移至我的当前桌面。


1

当辅助显示位于“上方”时(在“系统偏好设置”->“显示”->“布置”中),这似乎最经常发生在我身上。如果发生问题,如果我将外部显示器“向右”移动,则X11窗口会重新出现。


1

在优胜美地,如果对我有用

  1. 打开系统偏好设置
  2. 打开显示<分辨率
  3. 选择“缩放”
  4. 暂时将设置更改为其他任何设置

对我来说,这足以迫使应用程序重新显示在屏幕上。


1

尽管在配置中丢失了一个窗口(在我的情况下为终端),这有点奇怪。我尝试了缩放,将所有功能都放在了前面,但似乎没有任何效果。

最终,“窗口”→“合并所有窗口”完成了此操作。


0

您可以在AppleScript编辑器中创建一个简单的应用程序来执行此操作。输入以下文本并将其另存为应用程序。如果将其放在“应用程序”文件夹中,则可以通过SpotLight轻松访问。我叫我的收集窗。

property processesToIgnore : {}
tell application "Finder"
    set _b to bounds of window of desktop
    set screen_width to item 3 of _b
    set screen_height to item 4 of _b
end tell
tell application "System Events"
    set allProcesses to application processes
    set _results to ""
    repeat with i from 1 to count allProcesses
        set doIt to 1
        repeat with z from 1 to count processesToIgnore
            if process i = process (item z of processesToIgnore) then
                set doIt to 0
            end if
        end repeat
        if doIt = 1 then
            tell process i
                repeat with x from 1 to (count windows)
                    set winPos to position of window x
                    set _x to item 1 of winPos
                    set _y to item 2 of winPos
                    if (_x < 0 or _y < 0 or _x > screen_width or _y > screen_height) then
                        set position of window x to {0, 22}
                    end if
                end repeat
            end tell
        end if
    end repeat
end tell

1
为了完整起见,您将需要解释如何解决“不允许脚本编辑器进行辅助访问”(Yosemite)
jcollum

0

XQuartz的另一种解决方案:

brew install wmctrl
wmctrl -i -r $(wmctrl -G -l | grep -i inkscape | cut -d' ' -f1 ) -e 0,0,0,100,100

用任何您想要的替换“ inkscape”。


0

这是一个简单的答案,需要15秒,并且是永久解决方法。

https://groups.google.com/forum/#!topic/eggbotuser/48RbZ2Pey5A

如果您有多个显示器,则会出现此问题。该文档已打开,它刚好位于所有显示屏幕之外的左侧。您无法使用Applescript修复此问题:XQuartz没有实现标准的可脚本化动词来获取和设置窗口的位置。它还没有实现标准的X11窗口管理器等效项。

问题的原因是Inkscape中的首选项设置与Mavericks中的首选项设置之间的冲突。

“系统偏好设置”>“任务控制”中“小牛”的即开即用偏好设置为[x]显示器具有单独的空格

Inkscape的菜单栏中“文件”>“ Inkscape首选项”>“ Windows”的即开即用首选项设置为(•)保存和还原每个文档的窗口几何。

如果您更改OS X首选项(需要注销并重新登录),或者将Inkscape首选项更改为(•),请不要保存窗口几何图形(除非您可以使Inkscape向您显示窗口),Inkscape的效果符合预期。

因此,如果您希望Mavericks在Mac上具有多个显示的新行为,然后暂时恢复为旧方法,更改Inkscape首选项,然后将Mavericks设置回每个屏幕上的菜单栏。


0

在应用程序的菜单项“窗口”下,选择“全部排列”。这适用于Mac的Microsoft PowerPoint,但可能无法全部使用。


0

打开MS Powerpoint时,我的Mac中存在类似的问题,因为它不会显示在屏幕上。最简单的方法是转到Mac屏幕顶部的Powerpoint菜单栏,然后​​单击“窗口”,然后在该菜单下单击“全部排列”。丢失/隐藏的PowerPoint窗口将显示


0

我找到的最简单的解决方案是右键单击任务栏中的相关图标,然后选择“隐藏”。然后,您可以执行相同操作,然后选择“显示”,然后再次出现您丢失的窗口。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.