Windowsのデュアルモニターのウィンドウを最大化しますか?


回答:


17

他の人が言っていることとは対照的に、マウスの下にあるウィンドウを最大化する無料の実用的なソリューションがあります。

(クレジットは、これらの驚くべき「自動」機能を書いた人に渡されます-私はそれらを使用するビットを書きました。)

autoitをダウンロードしてインストールします(フリーソフトウェア):

http://www.autoitscript.com/site/autoit/

.au3ファイルを作成します。

これを内側に貼り付けます:

#include <misc.au3>
#include <Array.au3>
HotKeySet('{ESC}', '_Exit')

Global $WinText, $OldMouse[2], $NewMouse[2], $Windows, $x, $MyWin, $MyCoords

$NewMouse = MouseGetPos()
$title = _GetWin()
WinSetState($MyWin,"",@SW_RESTORE)
WinMove($MyWin,"",0,0,3840,1165)

Func _GetWin()
    Local $Coords
    ToolTip("")
    $Mouse = MouseGetPos()
    $OldMouse = $Mouse
    $Windows = _WinList()
    ;_ArrayDisplay($Windows, "")
    For $x = 1 To UBound($Windows)-1
        $Coords = WinGetPos($Windows[$x][0], "")
        If $Coords = -4 Then ExitLoop
        If IsArray($Coords) Then
            If $Mouse[0] >= $Coords[0] And $Mouse[0] <= ($Coords[0]+$Coords[2]) And $Mouse[1] >= $Coords[1] And $Mouse[1] <= ($Coords[1]+$Coords[3]) Then ExitLoop
        EndIf   
    Next
    If $x = UBound($Windows) Then $x -= 1
    $MyWin =  $Windows[$x][0]
    $Control = _MouseGetCtrlInfo()
    $Return = $Windows[$x][0] & @CRLF & $Control 
    Return $Return
EndFunc 

Func _WinList()
    Local $WinListArray[1][2]
    $var = WinList()
    For $i = 1 to $var[0][0]
        If $var[$i][0] <> "" AND IsVisible($var[$i][1]) Then
            Redim $WinListArray[UBound($WinListArray) + 1][2]
            $WinListArray[UBound($WinListArray)-1][0] = $var[$i][0]
            $WinListArray[UBound($WinListArray)-1][1] = $var[$i][1]
        EndIf
    Next
    Return $WinListArray
EndFunc

Func IsVisible($handle)
  If BitAnd( WinGetState($handle), 2 ) Then 
    Return 1
  Else
    Return 0
  EndIf
EndFunc

Func _Exit()
    Exit
EndFunc 

Func _MouseGetCtrlInfo()  ; get ID, Classe and Text of a control
    Global $hWin = WinGetHandle($MyWin)
    Global $sClassList = WinGetClassList($hWin)
    Local $sSplitClass = StringSplit(StringTrimRight($sClassList, 1), @LF)
    Local $aMPos = MouseGetPos()
    ;_ArrayDisplay($sSplitClass, "")
    $MyCoords = ClientToScreen($hWin)
    For $iCount = UBound($sSplitClass) - 1 To 1 Step - 1
        Local $nCount = 0
        If $sSplitClass[$iCount] = "WorkerW" Then ContinueLoop
        While 1
            $nCount += 1
            $aCPos = ControlGetPos($hWin, '', $sSplitClass[$iCount] & $nCount)
            If @error Then ExitLoop
            $hCtrlWnd = ControlGetHandle ($hWin, "", $sSplitClass[$iCount] & $nCount)
            If IsArray($aCPos) Then
                If $aMPos[0] >= ($MyCoords[0]+$aCPos[0]) And $aMPos[0] <= ($MyCoords[0]+$aCPos[0] + $aCPos[2]) _
                    And $aMPos[1] >= ($MyCoords[1]+$aCPos[1]) And $aMPos[1] <= ($MyCoords[1]+$aCPos[1] + $aCPos[3]) Then
                    $aReturn = DllCall('User32.dll', 'int', 'GetDlgCtrlID', 'hwnd', $hCtrlWnd)
                    If @error Then Return "Err"
                    $Text = ControlGetText($hWin, '', $sSplitClass[$iCount] & $nCount)
                    If StringInStr($Text, @LF) Then $Text = "demasiado largo"
                    If IsArray($aReturn) Then Return 'ControlID: ' & $aReturn[0] & @CRLF & 'ClassNameNN: ' & $sSplitClass[$iCount] & $nCount &  @CRLF & "Text: " & $Text
                EndIf      
            EndIf
        WEnd
    Next
    ;_ArrayDisplay($sSplitClass, "")
    Return "No Ctrl"
EndFunc

Func ClientToScreen($hWnd)    ; get client area of a win relative to the screan
    Local $Point, $aRes[2]
    Local $cX, $cY
    $Point = DllStructCreate("int;int")
    DllStructSetData($Point, 1, $cX)
    DllStructSetData($Point, 1, $cY)
    DllCall("User32.dll", "int", "ClientToScreen", "hwnd", $hWnd, "ptr", DllStructGetPtr($Point))
    $aRes[0] = DllStructGetData($Point, 1)
    $aRes[1] = DllStructGetData($Point, 2)
    Return $aRes
EndFunc

次に、行を変更します

WinMove($ MyWin、 ""、0,0,3840,1165)

あなたの好みの値に。

次に、このファイルへのWindowsショートカットを作成し、右クリックして[プロパティ]を選択し、ショートカットを割り当てます(たとえば、CTRL + ALT + UP)。

ほとんどの場合、この手順を繰り返して、ウィンドウを小さなサイズに復元するために2つ目のファイルを作成する必要があります。

お役に立てれば


1
大好きです!私はNVidiaモザイクを使用するつもりでしたが、モニターを2枚の別々のグラフィックカードから分割したかったので、KVMがVGAを実行していないために復元できませんでした。gotchyaのみ-.au3ファイルへのショートカットから直接機能するキーボードショートカットを取得できませんでした。ただし、au3スクリプトを呼び出したバッチスクリプトへのショートカットを処理するキーボードショートカットを取得することができました。
paquetp

1
実際、スクリプトファイルがデスクトップに配置されていない限り、ショートカットメソッドは機能しません。
ニコス

1
3つ以上のモニターがある場合、WinMove($ MyWin、 ""、0,0,3840,1165)の行の0,0は開始点の座標を表すため、変更することで任意の数の画面で最大化できます。これらの数字はそれに応じて。
ilakast 14

Win 10でこのmaximize.au3へのショートカットを作成する必要があり、ショートカットのプロパティを使用してキーショートカットを割り当てることができます。バッチは必要ありません。
マーティンザスケ

@nikosこのスクリプトは私には役立ちますが、ウィンドウの位置の構文を理解できません。私の0,0は私のメインモニターの左上にどこかに「近い」ようですが、完全ではありません。また、私の2番目のモニターはメインモニターの左側にあります(スクリプトではそのようになっているようですが、AutoIt構文はまだ読みません)。しかし、スクリプトは私のメインモニターの右側(「何もない」)にプログラムを開きます。負の値(-1920,0)にフックしようとしましたが、うまくいきませんでした。負の数は拒否しました。お知らせ下さい。あなたの答えは喜びです、多くのプログラムのための私のソリューションになります、ただもっと学ぶ必要があります
マーティンザスケ

9

Jeff Axelrodには、AutoHotKeyを使用する優れたソリューションがあります。

彼はShift + Windows + Up組み合わせをマッピングして、すべてのディスプレイでウィンドウを最大化します。これにより、Windows 7のWindows + Upホットキーが補完され、選択したウィンドウが1つのモニターで最大化されます。

ここに彼のコードがあります(ジェフに感謝!):

;Shift + Windows + Up (maximize a window across all displays) https://stackoverflow.com/a/9830200/470749
+#Up::
    WinGetActiveTitle, Title
    WinRestore, %Title%
   SysGet, X1, 76
   SysGet, Y1, 77
   SysGet, Width, 78
   SysGet, Height, 79
   WinMove, %Title%,, X1, Y1, Width, Height
return

Shift + Windows + Upは、2つの画面と2つの異なるグラフィックドライバーを使用するWindows 10セットアップでは機能しません。他の人にとっては潜在的に有用です。
マーティンザスケ

8

デュアルモニターツールを使用する:複数の画面設定を管理する無料のツールセットです。

ではスワップスクリーンあなたはすべての画面を占有し、それを最大限に高めることができますので、ツール、あなたは「スーパーサイズアクティブなウィンドウ」にホットキーを割り当てることができます。


2
Ultramonから来て、私が探していたものを正確に実行する、正常なデフォルト(すべて無効)の優れたプログラム。ヒント:「アクティブウィンドウのスーパーサイズ」へのホットキーはトグルのように機能します。もう一度押すと、ウィンドウが復元されます。
ファニス

3

nVidiaビデオカードがある場合:

  1. デスクトップを右クリックし、「NVIDIAコントロールパネル」をクリックします
  2. タスクのリストの一番下にあるワークステーションの下には、「モザイクを設定」があります。クリックして。
  3. 右側のペインで、「モザイクを有効にする」の横のチェックボックスをクリックします
  4. [ディスプレイ]で、結合するモニターの横にチェックマークを付けます。
  5. [構成]で、必要なトポロジを選択します(横に並べて、垂直に..)
  6. 画面の右下で、「適用」をクリックします

これで、最大化ボタンをクリックすると、両方のモニターがカバーされます。タスクバーは両方のモニターもカバーします。バグがある場合は、モニターの左側にドラッグして、垂直になるようにしてください(アイコンを小さくして、「結合しない」を使用すると効果的です)。



2

少し遅れますが、Intel統合グラフィックを使用している場合は、Intelグラフィックコントロールパネルを開き、ディスプレイメニューを選択して、そこから複数のディスプレイを選択し、[コラージュ]を選択します。 。

有効にしたスクリーンショットは次のとおりです。

これのスクリーンショットが有効になりました


1

それ以外の場合は、高度なグラフィックカードを使用して、モニターを1つの大きな画面として機能するように構成できます。


0

Windows 7では、ウィンドウをドラッグして両方の画面を覆うことができます。デスクトップを右クリックして「画面解像度」を選択した場合、「複数のディスプレイ」の下で「これらのディスプレイを拡張する」を選択する必要があります。もう一度ウィンドウを閉じると、サイズと位置が記憶されます。


それは本当です、私はあなたがショートカットまたはそのような何かのどちらかで両方のモニターへのウィンドウを簡単に最大化できる解決策を探しています。
クラッカージャック

あなたは、単に画面の上部には、ウィンドウのタイトルバーをドラッグすることによってそれを行うことができない
subanki

@subanki-いいえ、現在のモニター(「バンプ」したウィンドウ)のウィンドウを最大化するだけです
Chris_K

0

まだ誰かがautoitを使用してこれを実行しようとしている場合、私はこのコードを使用してこれを管理しました:

HotKeySet("^+{UP}", "Resize_Window") ; CTRL+SHIFT+UP
While 1
    Sleep(1000)
WEnd
Func Resize_Window()
    WinSetState("[ACTIVE]","",@SW_RESTORE)
    WinMove("[ACTIVE]","",0,0,_WinAPI_GetSystemMetrics($SM_CXVIRTUALSCREEN),_WinAPI_GetSystemMetrics($SM_CYVIRTUALSCREEN))
EndFunc

WinAPI.au3とWindowsConstants.au3を含めると、これは機能します。
マックスホーヘネッガー

0

私はこの回避策をSizer(ホームページ)で使用します-その小さなフリーウェアユーティリティを使用すると、ウィンドウストレッチエリアで右クリックして定義済みのウィンドウサイズを設定できます。

プロファイルセットを作成するだけです。

  • 幅=モニターの幅の合計
  • 高さ=モニターの高さ-タスクバーの高さ(= 40)
  • 移動=左上。

次に、ウィンドウの右下の端まで右クリックして、プロファイルを選択します。

ここに画像の説明を入力してください


0

ソフトウェアやコードなしでこれを行う方法を見つけました。自動または完全ではありませんが、簡単で十分に機能します。

  1. Windows + 2つのモニターの端にあるモニターの半分にウィンドウをスナップする左または右矢印キー
  2. ウィンドウの端をつかみ、両方のモニターで反対側にドラッグします

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.