我有一个双显示器设置,最近我使用了定位设置,并且我的一些单窗口应用程序偏爱保留它们最后关闭的位置,然后在同一位置打开。不幸的是,这现在将它们放置在屏幕的可视区域之外!
是否有某种方法可以将特定窗口强制进入可见区域?
我有一个双显示器设置,最近我使用了定位设置,并且我的一些单窗口应用程序偏爱保留它们最后关闭的位置,然后在同一位置打开。不幸的是,这现在将它们放置在屏幕的可视区域之外!
是否有某种方法可以将特定窗口强制进入可见区域?
Answers:
我使用这种方法:
如果您使用的是非英语版本的Windows,则“ R”和“ M”菜单选项可能会有所不同。
您可以右键单击任务栏上的程序按钮,然后单击“移动”。现在,您可以使用键盘上的箭头按钮将窗口移到可以看到的位置。需要一些摆弄,有时窗户会“卡在”显示器边缘。您也可以尝试使用鼠标,但是如果您还看不到窗口,则键盘更可靠;-)
回到任务栏之前,我曾通过调Alt+Space出窗口菜单来解决此问题,然后调M出了Move功能。然后,使用箭头键可以将窗口移回屏幕。
另一种快速的方法是右键单击任务栏,然后选择Cascade Windows。
编辑:根据评论停产
为了将来快速解决此问题,并在双屏上定位应用程序,我建议使用Winsplit Revolution。通过简单地按Ctrl-Alt和数字键盘将窗口完全放回所需位置,可以减少解决此问题的麻烦。
我只是在基于Tk的Windows 7上使用Git GUI遇到了这个问题,因此在Windows上有时会以奇怪的方式出现故障。我尝试打Alt-Space并使用move命令将其回弹到视野中,但是它似乎卡住了。最大化它会把它带回来,但是如果我把它放回窗口模式,它将再次消失。
我所做的就是将其最大化,抓住标题栏,并将其拖动到屏幕的一侧,以便Aero Snap将其大小调整为屏幕大小的一半,然后将其置于窗口模式。之后,我将其从屏幕侧面拖开,并重新获得了对其的控制。
您可以使用NIRSOFT WinLister。我注意到当您使用经典主题时,Windows 7上不提供“移动”方法,并且其他各种方法都失败了,因此我发布了“如果其他所有方法都失败”的替代方法。
在此处下载WinLister应用程序。
以管理员身份运行WinLister,然后选择要移回屏幕的窗口。不以管理员身份运行将无法使应用程序为您移动窗口。
右键单击并选择“ Center Selected Windows”,就可以完成!
屏幕截图在这里。
在某些情况下,尽管远程位置有多个屏幕,但您可能无法从您的位置访问它们。按键命令不起作用,因为您已被锁定在屏幕之外的任何视图之外。
在这种情况下,如果您可以打开应用程序的其他实例,请执行此操作。前几个实例几乎可以肯定会以更多的幻像窗口形式出现在任务栏中。继续做。最终,它们将开始填充主视图。然后使用任务栏图标右键单击并关闭屏幕外的实例。一旦没有打开屏幕外的实例,请在主屏幕上将其关闭。下次打开该应用程序时,它将出现在主屏幕上,而不是“关闭摄像机”。
对于熟悉PowerShell的任何人,请尝试以下操作:
如果该窗口是主窗口,它将被移动到屏幕的左上角。
如果该窗口是另一个程序的子窗口,则其左上角将与其父窗口的左上角对齐。
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/
从移动窗口与Windows上的快捷方式的底部/顶部显示器通过Tymric:
我写了一个AHK脚本。
用法:
Win+ Alt+ Arrow:将活动窗口移至监视器,其方向由箭头指示。请注意,如果尝试在设置中从监视器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
我编写了一个名为Borderline的工具,该工具在运行时会自动将屏幕外的窗口移回屏幕上。您必须在需要时运行它(如果您为其分配了键盘快捷键或将其放在开始菜单中,效果最佳),但这也意味着它并不总是在后台运行。