web-dev-qa-db-ja.com

画面外に開くウィンドウを移動する方法

私は二重のモニターセットアップをしていて、そして最近私はポジショニング設定で遊んだ、そして私のシングルウィンドウアプリケーションのいくつかはそれらが最後に閉じられた場所を保存し、後で同じ位置で開くことを好む。残念なことに、それは今私の画面の表示領域からそれらを配置します!

特定のウィンドウを表示領域に押し込む方法はありますか?

267

Windows 7以降のユーザーの場合 Windows Key+Shift+ または  選択したウィンドウをその方向にモニタに移動します。

192
andho

私はこのアプローチを使います:

  • つかいます Alt+Tab オフスクリーンアプリケーションに切り替えます。
  • 押す Alt+SPACE システムメニューを表示する(画面外にあるため表示されない)
  • 押す R ウィンドウが最大化されていないことを確認するために[復元]メニューを選択する(最大化されている場合は移動できません)
  • 押す Alt+SPACE もう一度 M 「移動」メニュー項目を選択します。
  • 移動を開始するには、いずれかの矢印キーを押します。
  • マウスを使ってウィンドウを好きな場所に配置します。

英語以外のバージョンのWindowsを使用している場合は、 "R"と "M"のメニュー選択はおそらく異なるでしょう。

422
Terje Mikal

Windows 10の場合、古いものを使用するには、カーソルキーを使ってウィンドウを移動します。 Shift タスクバーからコンテキストメニューを開くときに押すキー。

enter image description here

How To Geekからの情報

14
Brad Patton

タスクバーのプログラムのボタンを右クリックしてから、[移動]をクリックします。キーボードの矢印ボタンを使って、ウィンドウを見える位置に移動させることができます。少し手間がかかりますが、ウィンドウがモニタの端に「動かなくなる」ことがあります。マウスを使ってみることもできますが、ウィンドウが表示されない場合はキーボードの方が信頼性が高くなります。

12
Emthigious

タスクバーがある前に、私はでこの問題を解決するために使用していました Alt+Space ウィンドウメニューを表示する M 移動機能用です。矢印キーを使用すると、ウィンドウを画面上に戻すことができます。

8
Greg Hewgill

もう1つの簡単な方法は、タスクバーを右クリックしてCascade Windowsを選択することです。

8
T. Kaltnekar

編集:コメントに従って廃止

将来この問題を素早く解決し、デュアルスクリーンにアプリケーションを配置するには、 Winsplit Revolution をお勧めします。この問題を解決するには、Ctrl-Altとnum-padキーを押してウィンドウを元の位置に戻す必要があります。

5
Andy

私はこの問題に遭遇しました、そして、私のために全く何も働いていませんでした。それで私はタスクマネージャに入り、スクリーンから外れたプログラムを右クリックしました。動作しなかったに切り替えても前面に持って来なかった。注意するために、これは静的ウィンドウだったので、最大化はタスクバーから利用できませんでした。しかし、あなたはタスクマネージャを介して最大化することができ、それはあなたのメインディスプレイにそれをもたらします!そこからあなたはウィンドウであなたがする必要がある何でもすることができます。 :)

5
Leo

私はTkをベースにしているのでWindows 7上のGit GUIでこの問題に遭遇したばかりなので、Windows上では時々奇妙な方法で失敗する傾向があります。私はAlt-Spaceを押して移動コマンドを使用してそれをシミ表示に戻してみましたが、動かなくなったようです。最大化すると元に戻りますが、ウィンドウモードに戻すと再び消えます。

最大化し、タイトルバーをつかみ、画面の横にドラッグして、Aero Snapが画面の半分のサイズになるようにしてウィンドウモードにしました。その後、私はそれをスクリーンの横から引き離して、そしてそれのコントロールを取り戻しました。

3
unused

私は Shove-it という気の利いた小さなツールを使います。それは古代のソフトウェアです(そしてホームページはそれを証明しています)が、すべてのWindowsバージョンで動作します。

PowerShellに慣れている人は、これを試してください。

  • 以下のコードをコピーしてPowerShell ISEセッションに貼り付けます。
  • ヒットラン
  • 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/

1
JohnLBevan

あなたはNIRSOFT WinListerを使うことができます。 Windows 7では、クラシックテーマを使用しているときには "Move"メソッドは使用できないことに気付きました。他のさまざまなメソッドは失敗したので、私は "IF all else failed"という選択肢を掲載します。

  1. WinListerアプリケーション をここからダウンロードしてください

  2. 管理者としてWinListerを実行して、Screenに戻りたいウィンドウを選択します。管理者として実行していないと、アプリケーションにウィンドウを移動する機能が与えられません。

  3. 右クリックして[選択したウィンドウを中央揃え]を選択すると完了です。

スクリーンショット はこちら

1
user199343

場合によっては、離れた場所に複数の画面があるにもかかわらず、あなたの場所からそれらにアクセスできない場合があります。画面に表示されていないビューはロックされているため、キーコマンドは機能しません。

この場合、アプリケーションの追加のインスタンスを開くことができれば、それを開きます。最初のいくつかのインスタンスは、タスクバーにまだもっと仮想のウィンドウとして表示されます。これをやり続けなさい。やがて、彼らは主観的な見方をし始めます。次に、タスクバーのアイコンを使用して、画面外のインスタンスを右クリックして閉じます。開いている画面外インスタンスがなくなったら、主画面のインスタンスを閉じます。次回そのアプリケーションを開くと、そのアプリケーションはメイン画面に表示され、「オフカメラ」には表示されません。

1
Greg Mayer

ウィンドウを選択します(例: Alt+Tab)それから Alt+F7 矢印キーでウィンドウを元の位置に戻します。完了しました。

隠されたウィンドウがどこにあるのか(そしてそれをスクリーンに向かってどのように動かすのか)盲目的に知るのが難しいことがあります。ウィンドウ選択中のアニメーションは役に立つかもしれません。私の設定(私は時々私のラップトップスクリーンの上に2番目のスクリーンを使う)のために、スクリーンの外に現れるウィンドウは通常下にあります。ホールディング Alt+F7+Up したがってそれらを視野に入れます。

1
Georg Jung

私はwinampと同じ問題を抱えていました。私がこれまでに見つけた唯一の(不満足な)解決策:スクリーン解像度を違う解像度に変更して元に戻す

トーマス

1
Thomas

UltraMon (non-free、Windows、GUI)を使用して、ウィンドウを次のモニターまたは前のモニターに移動するためのキーボードショートカットを設定することもできます。

enter image description here

0

From Windowsの場合はショートカットでウィンドウを下/上のモニターに移動 by 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
0

タスクバーの上にカーソルを置きます。ウィンドウを左右に並べて選択します。ウィンドウが画面に表示されます。最後にタスクバーの上にカーソルを置きます。

0
ravi21

時々、これは解決しました:

  • クリック WinKey + P
  • Extendまたは他のオプションを選択すると、すべてのウィンドウがカスケードされます。目的のウィンドウをプライマリ画面に移動します。
0
T.Todua

実行時に自動的に画面外のウィンドウを画面上に戻す Borderline というツールを作成しました。必要なときに実行する必要があります(キーボードショートカットを割り当てたり、スタートメニューに配置したりすると最も効果的です)が、バックグラウンドで実行されているとは限りません。

0
jamesdlin