我有一个双显示器设置,最近我使用了定位设置,并且我的一些单窗口应用程序都倾向于保留最后关闭的位置,然后在相同的位置打开。不幸的是,现在它们将它们放置在屏幕的可视区域之外!

是否可以通过某种方法将特定窗口强制进入可视区域?

评论

在Windows 10中这仍然是一个问题!我有3个监视器,我只使用一个“在这里和那里” ...当我这样做时,然后停止使用它,一些打开的程序默认在其上打开。我必须执行win +向左箭头才能最终将其返回到主监视器。

七年后仍然是一个问题...

可能重复的superuser.com/questions/1206086/…

winlister是最好的。.我之前尝试过其他技巧,但是这个技巧一直都有效。.alt-space等仅在某些Windows上有效。

#1 楼

对于Windows 7和更高版本的用户: + Shift +←或→会将所选窗口沿该方向移动到监视器。

评论


为此,我有一个带有非标准窗口的应用程序,因此Alt-Space技术不起作用(Windows上的Foxit Reader)。

–Bdoserror
2015年11月5日在18:38

还需要注意的是win +左/右/上,它将窗口覆盖活动监视器的一半(在任一侧)或使其最大化。这应该在我发现的所有条件下都有效,并且也是非常有用的键(除非当我尝试按fn +箭头键:P时不断按下它们)。

–凯特
17年1月30日在16:42

这在我的Windows 10 Pro x64中没有任何作用

– Mike'Pomax'Kamermans
17年5月25日在1:00

@ Mike'Pomax'Kamermans:好笑。这是在Windows 10 Pro x64笔记本电脑上移动移动在屏幕外打开的Emacs窗口的唯一方法。

– Mike Sherrill的“猫召回”
17年7月13日在11:15

哇,真不敢相信我从来不知道这一点。八年后仍然有人觉得这很有用:)

–veryRandomMe
17年10月4日在1:58

#2 楼

我使用这种方法:


使用Alt + Tab切换到屏幕外应用程序。
按Alt + SPACE弹出系统菜单(您不会看到
,因为它不在屏幕上)
按R选择“还原”菜单选项,以确保窗口未最大化(如果窗口最大化则无法移动)
再次按Alt + SPACE,然后M选择“移动”菜单选项。
按箭头键之一开始移动。
现在只需使用鼠标将窗口放置在所需位置即可。

如果您使用的是非英语版本的Windows,则“ R”和“ M”菜单选项可能会有所不同。

评论


非常感谢“ Terje Mikal”为您提供的解决方案,为我省了不少钱。但是鉴于该问题仅在Windows 7删除了旧的解决方案(在任务栏上右键单击应用程序按钮)后才发生,因此还有一个更好的解决方案,由“ kmote”于2013年6月18日17:45发布在“ Eththigious”下2010年10月10日08:50:«在Windows 7下,您需要按住SHIFT键并右键单击任务栏按钮»

–米歇尔·梅林(Michel Merlin)
16 Dec 10'在8:25



尝试了其他所有步骤,但是最终还是用箭头键启动了运动,确实如此……哇。我已经快要重新安装该应用程序了!

– Philip Guin
17年1月12日在17:56

对于我正在处理的应用程序,“还原”显示为灰色,但是“最大化”确实可以在该阶段中正常工作,因此无需进行任何移动。为赢取最大化!

–布赖恩·博尔科斯基(Brian Bulkowski)
18-3-21在22:47



我按照上面的方法操作,但以下组合也适用于我:Alt + Tab,Alt + Space,M,然后按Esc键,这似乎也有效

– Mz A
19-2-28在6:58



差不多到2020年,仍在处理这个问题。

–专家
19年8月8日在9:27

#3 楼

对于Windows 10,为了使用旧的移动带有光标键的窗口,您需要在从任务栏打开上下文菜单时按下Shift键。



来自“如何怪胎”的信息

评论


在当前的Windows 10版本中,您也可以将鼠标悬停在任务栏上并按住一秒钟,这将导致显示窗口的缩略图。右键单击缩略图将提供“旧”上下文菜单,就像按住Shift并单击一样。

–编码器
18年8月13日在7:31

@Coderer:评论确实很有帮助,我不知道。我以为他们完全删除了它。

–Oak_3260548
19年8月29日在12:12

我完全忘记了!我认为如果任务栏按钮代表一个窗口,您也可以右击鼠标。如果所讨论的应用程序有多个窗口,则将获得一个不同的上下文菜单。

–编码器
19年8月29日在12:22

#4 楼

您可以右键单击任务栏上的程序按钮,然后单击“移动”。现在,您可以使用键盘上的箭头按钮将窗口移动到可以看到它的位置。需要一些摆弄,有时窗户会“卡在”显示器的边缘。您也可以尝试使用鼠标,但是如果您还看不到窗口,则键盘会更可靠;-)

评论


我不了解键盘,但是如果它们不在屏幕上,则无法使用鼠标,我已经尝试过了。

–马修·沙利(Matthew Scharley)
09-10-10在8:54

即使箭头键不在屏幕上,您也应该能够使用它们,除非系统上有一些非标准的东西可以防止这种情况。对于遇到这个问题的人,这一直是我的标准回应。

–music2myear
2011年4月22日在19:13

同样,在按下至少一个箭头键后,窗口将“附加”到鼠标上,您可以用鼠标移动它(无需单击!)这种一键鼠标的方法通常比仅使用键快。

–丹尼尔·里科夫斯基(Daniel Rikowski)
2013年6月4日15:52

在Windows 7下,您需要右键单击任务栏按钮。

– kmote
13年6月18日在17:45

这是唯一对我有用的解决方案...

–sebagomez
16年8月27日在21:13

#5 楼

回到任务栏之前,我曾经使用Alt + Space来解决此问题,以显示窗口菜单,然后使用M来表示Move功能。然后,使用箭头键可以将窗口移回屏幕。

评论


请注意,+ 1表示如果将它们最大化到一个屏幕,它们将不会移动,如果窗口不只是简单地“超出限制”而是位于虚拟屏幕上,则可能会出现问题。它们可能是用于OP的,因为最大化应该已经覆盖了占用屏幕的整个分辨率。

–mckenzm
18年4月3日在1:30

#6 楼

另一种快速的方法是右键单击任务栏,然后选择Cascade Windows。

评论


这是一种相当丑陋的方式,因为它会影响我所有打开的窗口(而且我通常也至少打开了一个浏览器,即使没有打开六个浏览器也是如此)

–马修·沙利(Matthew Scharley)
09年10月10日在9:22

是的,这是最快的。您也可以关闭不在屏幕上的窗口,然后使用撤消级联操作恢复窗口的位置。我不知道它是否还会将不在屏幕上的窗口的位置恢复到该位置,因为我无法尝试(只有一台显示器)。

– T. Kaltnekar
09-10-10在10:22

#7 楼

我遇到了这个问题,对我来说绝对没有任何效果。因此,我进入了任务管理器,然后右键单击不在屏幕上的程序。切换到没有用,也没有出现在前面。请注意,这是一个静态窗口,因此无法通过任务栏使用最大化。但是您可以通过任务管理器来最大化它,并将其带到您的主屏幕!从那里,您可以使用窗口执行任何操作。 :)

评论


感谢您的回答。右键单击“任务管理器”中的“最大化”对我来说是唯一有效的方法。

–编码员
2015年12月16日下午0:48

#8 楼

编辑:根据评论停产。

要在将来快速解决此问题,并在双屏上定位应用程序,我可以推荐Winsplit Revolution。通过简单地按Ctrl-Alt和数字键盘将窗口完全放回所需位置,可以减少解决此问题的可能性。

评论


不幸的是,它不再免费了

– Charbel
2014年9月15日下午16:35

是的,看起来不错,但我有严格的政策,除非我愿意,否则不付款。就像用于Lastpass或Acronis True Image。根据我的时间表,很有可能可能要超过30天才能再次出现问题,因此试用期对我不起作用。

– SDsolar
17年5月4日在19:21



不幸的是,WinSplit Revolution已停产,并且没有新的更新。”替换为“ MaxTo”,目前价格为19美元

–TT--
18-10-2在13:54

WinSplit-Revolution是免费软件,如果您搜索它,仍然可以下载。最新版本是2011年发布的11.04。它可在Windows 10中使用。经修改的v9.02源代码在GitHub中以WinSplit-Reloaded的形式提供。这是一个了不起的产品。

–本
19 Jun 10'在15:07



@Ben,感谢您的链接。我转到答案中的链接,并引用了该信息。 (现在页面上显示“不再提供WinSplit Revolution,但我们提供了一个很好的替代方法。”)GitHub分支中的自述文件提供了很多信息,并特别提及“ 9.02版本,于2009年公开发行”。

–TT--
19年7月11日在22:06



#9 楼

我使用了一个名为Shove-it的漂亮小工具,它只是检查是否有任何窗口在屏幕边缘之外,然后再次将其推回到屏幕上。它是古老的软件(并且主页对此进行了证明),但是可以在所有Windows版本上使用。

评论


链接现在已死:-(

– danio
2013年9月23日上午10:48

:-(另一方面,此解决方案可能已经过期。它是否还会发生?自从我上次需要此方法已经有好几年了。

– Torben Gundtofte-Bruun
2013年9月27日在7:51

web.archive.org/web/20090228082939/http://www.phord.com/…

–n611x007
15年1月8日在10:19

安装程序只是为我锁定(在Windows 7上)。

–mhenry1384
2015年3月30日,2:21

@ mhenry1384好,它已经有14年的历史(和32位),我们真的不能期望它可以与新的(64位?)版本一起使用.....

– Torben Gundtofte-Bruun
2015年4月1日在11:14

#10 楼

我只是在基于Tk的Windows 7上使用Git GUI遇到了这个问题,因此在Windows上有时会以奇怪的方式出现故障。我尝试打Alt-Space并使用move命令将其回弹到视野中,但它似乎卡住了。最大化它会把它带回来,但是如果我把它放回窗口模式,它会再次消失。

我所做的就是最大化它,抓住标题栏,并将其拖到屏幕的一侧。因此Aero Snap会将其尺寸调整为屏幕尺寸的一半,并使其进入窗口模式。之后,我将其从屏幕的一侧拖开,并重新获得了对其的控制。

评论


如此众多的答案受到了更高的评价,但没有一个对我有用。做到了。

–丹·尼森鲍姆(Dan Nissenbaum)
17年2月4日在17:07

Git GUI也将我带到了这里,但是我通过Shift-RightClick(在任务栏图标上),Move,箭头键,然后是鼠标(将窗口放置在应有的位置)组合解决了这个问题。 Emthigious / Brad Patton的解决方案起作用。

– mcalex
17年7月3日在3:59

#11 楼

我在winamp上也遇到了同样的问题。到目前为止,我发现的唯一(令人不满意的)解决方案是:将屏幕分辨率更改为其他分辨率并返回

Thomas

#12 楼

您可以使用NIRSOFT WinLister。
当您使用经典主题时,我注意到Windows 7上不提供“移动”方法,并且其他各种方法都失败了,所以我发布了“如果其他所有方法都失败”的替代方法。


在此处下载WinLister应用程序。
以管理员身份运行WinLister,然后选择要移回屏幕的窗口。
不以管理员身份运行不会显示应用程序即可为您移动窗口。
右键单击并选择“居中选中的窗口”,即可完成操作。

此处的屏幕截图。

评论


很棒的提示-这是唯一适用于MS TFS电动工具的解决方案,因为Alt-Space仅打开拥有的Windows资源管理器窗口的菜单,而不是关闭不在屏幕上的子窗口。

– danio
2013年9月23日上午10:48

#13 楼

在某些情况下,尽管远程位置有多个屏幕,但您可能无法从您的位置访问它们。按键命令不起作用,因为您已被锁定在屏幕之外的任何视图之外。在这种情况下,如果可以打开应用程序的其他实例,请执行此操作。前几个实例几乎肯定会以更多的幻像窗口形式出现在任务栏中。继续做。最终,它们将开始填充主视图。然后使用任务栏图标右键单击并关闭屏幕外的实例。一旦没有打开屏幕外的实例,请在主屏幕上将其关闭。下次打开该应用程序时,它将出现在主屏幕上,而不是“关闭相机”。

评论


您指的是“远程位置”,“您的位置”等等?为什么将用户“锁定在屏幕之外的任何视图之外”?

–斯科特
16-10-22在1:26

他指的是VM,Citrix,RDP等。您将不会在手机上读取4K分辨率。虚拟屏幕也是如此。一些公司用户将HDMI加密狗插入,以将必需的桌面物品停在视线之外。返回1个实际屏幕将它们移回原位。

–mckenzm
18年4月3日在1:35

#14 楼

选择窗口(例如,使用Alt + Tab)。然后按住Alt + F7,然后使用箭头键将窗口移回视图。完成。

有时很难盲目知道隐藏窗口的位置(以及如何将其移向屏幕)。选择窗口期间的动画可能会有所帮助。由于我的设置(我有时会在笔记本电脑屏幕上方使用第二个屏幕),因此屏幕外出现的窗口通常位于下方。因此,按住Alt + F7 + Up可以看到它们。

#15 楼

对于熟悉PowerShell的任何人,请尝试以下操作:


将以下代码复制并粘贴到PowerShell ISE会话中。
运行Run
按ALT + TAB /使屏幕外窗口处于活动状态
稍​​等片刻(在脚本上按RUN键5秒钟)
现在应显示该窗口。

如果该窗口是主窗口,它将被移到屏幕的左上角。

如果窗口是另一个程序的子窗口,则其左上角将与其父窗口的左上角对齐。

 Add-Type @"
    using System;
    using System.Runtime.InteropServices;

    // https://msdn.microsoft.com/en-us/library/windows/desktop/dd162897(v=vs.85).aspx
    public struct RECT 
    {
        public long left;
        public long top;
        public long right;
        public long bottom;
    }

    public class User32WinApi 
    {

        // https://msdn.microsoft.com/en-us/library/windows/desktop/ms633505(v=vs.85).aspx
        /*
            Gets the handle of the in-focus window
            NB: In some scenarios this can be NULL; so code needed to handle such an event
        */
        [DllImport("user32.dll")]
        public static extern IntPtr GetForegroundWindow();

        // https://msdn.microsoft.com/en-us/library/windows/desktop/ms633503(v=vs.85).aspx
        /*
            top & left are always 0 (i.e. since the rectangle is relative to the window itself)
            bottom & right equal the windows hieght and width, respectively.
        */
        [DllImport("user32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool GetClientRect(IntPtr hWnd, out RECT lpRect);

        // https://msdn.microsoft.com/en-us/library/windows/desktop/ms633534(v=vs.85).aspx
        [DllImport("user32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool MoveWindow(IntPtr hWnd, int X, int Y, int nWidth, int nHeight, bool bRepaint);

    }

"@
$repaint = $true 
$windowSize = New-Object RECT

"Quick; get the window you're after in focus; you have 5 seconds..."
Start-Sleep -Seconds 5 #allow 5 seconds for the user to get the window they're after in focus (e.g. using ALT+TAB / whatever)
$activeWindow = [User32WinApi]::GetForegroundWindow()
if ($activeWindow) {
    if([User32WinApi]::GetClientRect($activeWindow, [ref]$windowSize)) {
        if ([User32WinApi]::MoveWindow($activeWindow, 0, 0, $windowSize.right, $windowSize.bottom, $repaint)) {
            "Window moved successfully (hope you agree!)"
        } else {
            Write-Warning "Failed to move the active window"
        }
    } else {
        Write-Warning "Failed to get size of the active window"    
    }
} else {
    Write-Warning "No active window found"    
}
 


此处的原始代码:https://gist.githubusercontent.com/JohnLBevan/1593bbb860c2d2af436a1c9414e8adfa/

#16 楼

将光标放在任务栏上。右键单击并排选择显示窗口。它将使窗口显示在屏幕上。最后再次将光标移到任务栏上,右键单击并选择撤消显示窗口并排。

#17 楼

您还可以使用UltraMon(非免费的Windows,GUI)来设置键盘快捷键,以将窗口移至下一个或上一个监视器。


#18 楼

Tymric从“在Windows上使用快捷键将窗口移至底部/顶部监视器的窗口”中:

我编写了AHK脚本。

用法:

Win + Alt +箭头:将活动窗口移至监视器,其方向由箭头指示。请注意,如果尝试在设置中从监视器2向上或从监视器3向上移动,这可能会导致窗口移出屏幕。以后我会对其进行更新。

Win + Alt + Number:将活动窗口移至给定的监视器编号

#Persistent

SysGet, MonitorCount, MonitorCount


#!Up::
  GoSub CalculateDisplacement
  WinMove, A, , %xPos%, %displaceYneg%
  return
#!Down::
  GoSub CalculateDisplacement
  WinMove, A, , %xPos%, %displaceYpos%
  return
#!Left::
  GoSub CalculateDisplacement
  WinMove, A, , %displaceXneg%, %yPos%
  return
#!Right::
  GoSub CalculateDisplacement
  WinMove, A, , %displaceXpos%, %yPos%
  return

#!1::
  GoSub CalculateDisplacement
  WinMove, A, , %xPosOn1%, %yPosOn1%
  return

#!2::
  if (MonitorCount > 1) {
    GoSub CalculateDisplacement
    WinMove, A, , %xPosOn2%, %yPosOn2%
  }
  return

#!3::
  if (MonitorCount > 2) {
    GoSub CalculateDisplacement
    WinMove, A, , %xPosOn3%, %yPosOn3%
  }
  return

#!4::
  if (MonitorCount > 3) {
    GoSub CalculateDisplacement
    WinMove, A, , %xPosOn4%, %yPosOn4%
  }
  return

#!5::
  if (MonitorCount > 4) {
    GoSub CalculateDisplacement
    WinMove, A, , %xPosOn5%, %yPosOn5%
  }
  return

#!6::
  if (MonitorCount > 5) {
    GoSub CalculateDisplacement
    WinMove, A, , %xPosOn6%, %yPosOn6%
  }
  return

#!7::
  if (MonitorCount > 6) {
    GoSub CalculateDisplacement
    WinMove, A, , %xPosOn7%, %yPosOn7%
  }
  return

#!8::
  if (MonitorCount > 7) {
    GoSub CalculateDisplacement
    WinMove, A, , %xPosOn8%, %yPosOn8%
  }
  return

#!9::
  if (MonitorCount > 8) {
    GoSub CalculateDisplacement
    WinMove, A, , %xPosOn9%, %yPosOn9%
  }
  return


CalculateDisplacement:
  WinGetPos, xPos, yPos, , , A
  Loop, %MonitorCount% {
    SysGet, MonitorDimension, Monitor, %A_Index%
    if (xPos > MonitorDimensionLeft and xPos < MonitorDimensionRight and yPos < MonitorDimensionBottom and yPos > MonitorDimensionTop) {
      currentMonitor = %A_Index%
    }
  }
  SysGet, thisMonitor, Monitor, %currentMonitor%
  displaceXpos := xPos + thisMonitorRight - thisMonitorLeft
  displaceYpos := yPos + thisMonitorTop - thisMonitorBottom
  displaceXneg := xPos - thisMonitorRight + thisMonitorLeft
  displaceYneg := yPos - thisMonitorTop + thisMonitorBottom
  Loop, %MonitorCount% {
    SysGet, nextMonitor, Monitor, %A_Index%
    xPosOn%A_Index% := xPos - thisMonitorLeft + nextMonitorLeft
    yPosOn%A_Index% := yPos - thisMonitorTop + nextMonitorTop
  }
  return


#19 楼

我编写了一个名为Borderline的工具,该工具在运行时会自动将屏幕外的窗口移回屏幕上。您必须在需要时运行它(如果为它分配键盘快捷键或将其放在开始菜单中,效果最佳),但这也意味着它并不总是在后台运行。

#20 楼

有时,此问题可以解决:


单击WinKey + P
选择Extend或其他选项,所有窗口都将级联。将所需的窗口移至主屏幕。


#21 楼



暂时降低屏幕分辨率,用鼠标抓住顶部栏并移动中心。等待系统自动恢复分辨率。


DeskTop->屏幕分辨率
选择显示器,从当前设置更改为较低的分辨率。
系统显示新的分辨率,并询问您是否要在30秒内保留或恢复。
在30秒内,抓住未找到的窗口并将其移到中心。
等待超时以自动恢复。

窗口已移动...