デュアルモニターのセットアップがあり、最近、位置設定をいじくり回しました。私のシングルウィンドウアプリケーションのいくつかは、最後に閉じた場所を保持し、後で同じ位置で開くことを好みます。残念なことに、これにより、画面の表示可能領域の外に配置されます。
特定のウィンドウを表示可能領域に強制する方法はありますか?
デュアルモニターのセットアップがあり、最近、位置設定をいじくり回しました。私のシングルウィンドウアプリケーションのいくつかは、最後に閉じた場所を保持し、後で同じ位置で開くことを好みます。残念なことに、これにより、画面の表示可能領域の外に配置されます。
特定のウィンドウを表示可能領域に強制する方法はありますか?
回答:
私はこのアプローチを使用します:
英語版以外のWindowsを使用している場合、「R」と「M」のメニュー選択はおそらく異なるでしょう。
タスクバーのプログラムのボタンを右クリックして、「移動」をクリックします。キーボードの矢印ボタンを使用して、ウィンドウを表示できる場所に移動できます。いくつかのいじりが必要で、ウィンドウがモニターの端で「スタック」することがあります。マウスを使って試すこともできますが、まだウィンドウが表示されない場合はキーボードの方が少し信頼性があります;-)
タスクバーが表示される前に、この問題を修正Alt+Spaceしてウィンドウメニューを表示し、次にM移動機能を使用していました。矢印キーを使用すると、ウィンドウを画面上に戻すことができます。
別の高速な方法は、タスクバーを右クリックして、[カスケードウィンドウ]を選択することです。
編集:コメントごとに廃止
将来この問題を迅速に解決し、アプリケーションをデュアルスクリーン上に配置するには、Winsplit Revolutionをお勧めします。この問題を解決するには、Ctrl-AltキーとNum-padキーを押して、ウィンドウを目的の場所に戻すだけです。
私は、Shove-itと呼ばれる気の利いた小さなツールを使用します。これは、ウィンドウが画面の端の外側にあるかどうかを確認し、再び画面に押し戻します。これは古代のソフトウェアです(そしてホームページで証明されています)が、すべてのWindowsバージョンで動作します。
Tkに基づいているWindows 7のGit GUIでこの問題が発生したため、Windowsで時々奇妙な方法でグリッチが発生する傾向があります。Alt-Spaceを押して、moveコマンドを使用して、元の位置に戻してみましたが、動かなくなったようです。最大化すると元に戻りますが、ウィンドウモードに戻すと再び消えます。
私がやったのは、それを最大化し、タイトルバーをつかみ、画面の横にドラッグして、Aero Snapが画面サイズの半分にサイズ変更してウィンドウモードにしたことです。その後、私はそれを画面の横からドラッグして、コントロールを取り戻しました。
NIRSOFT WinListerを使用できます。クラシックテーマを使用している場合、Windows 7では「移動」メソッドが使用できないことに気づき、他のさまざまなメソッドが失敗したため、「IF all else failed」代替を投稿しています。
WinListerを管理者として実行し、画面に戻るウィンドウを選択します。管理者として実行しないと、アプリケーションにウィンドウを移動する機能が与えられません。
右クリックして「選択したウィンドウの中央」を選択すると完了です!
スクリーンショットはこちら。
場合によっては、遠隔地に複数の画面があるにもかかわらず、自分の場所から画面にアクセスできないことがあります。画面上にないビューからロックアウトされているため、キーコマンドは機能しません。
この場合、アプリケーションの追加インスタンスを開くことができる場合は、開いてください。最初のいくつかのインスタンスは、ほぼ確実にタスクバーにさらに幻想的なウィンドウとして表示されます。これを続けてください。最終的に、それらはプライマリビューに入力し始めます。次に、タスクバーアイコンを使用して、画面外のインスタンスを右クリックして閉じます。オフスクリーンインスタンスが開いていない場合は、プライマリスクリーンのインスタンスを閉じます。次回そのアプリケーションを開くと、「カメラ外」ではなく、プライマリ画面に表示されます。
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/
また、使用することができますUltraMon次または前のモニタにウィンドウを移動するためにキーボードショートカットを設定するには(非フリー、Windowsの、GUIを)。
以下からの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というツールを作成しました。必要なときに実行する必要があります(キーボードショートカットを割り当てるか、[スタート]メニューに配置すると最適に機能します)が、それは常にバックグラウンドで実行されないことも意味します。