Windows에서 듀얼 모니터의 창을 최대화 하시겠습니까?


답변:


16

다른 사람들의 말과 달리 여기에 마우스 아래에있는 창을 최대화하는 무료로 작동하는 솔루션이 있습니다.

(이 놀라운 '자동'기능을 작성한 사람에게 크레딧이 제공됩니다. 나는 그 기능을 사용하는 비트를 작성했습니다.)

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).

대부분의 경우 절차를 반복하고 창을 작은 크기로 복원하기 위해 두 번째 파일을 만들어야합니다.

도움이 되었기를 바랍니다


1
그것을 사랑하십시오! NVidia 모자이크를 사용하려고했지만 두 개의 별도 그래픽 카드에서 분할하려는 모니터가 VGA를 사용하지 않는 KVM으로 인해 복구 할 수 없었습니다. gotchya 만-.au3 파일의 바로 가기에서 바로 가기 키를 사용할 수 없었습니다. au3 스크립트라고하는 배치 스크립트의 단축키를 작동시키는 키보드 단축키를 얻을 수있었습니다.
paquetp

1
스크립트 파일이 바탕 화면에 배치되지 않으면 바로 가기 방법이 작동하지 않습니다.
nikos

1
모니터가 두 개 이상인 사용자의 경우 WinMove ($ MyWin, "", 0,0,3840,1165) 행의 0,0은 시작점의 좌표를 나타내므로 변경하여 화면의 양에 따라 최대화 할 수 있습니다 그에 따라이 숫자들.
ilakast

Win 10에서이 maximize.au3에 대한 바로 가기를 만들어야하며 바로 가기 속성으로 키 바로 가기를 지정할 수 있습니다. 배치가 필요하지 않습니다.
Martin Zaske

@ nikos이 스크립트는 저에게 효과적이지만 Windows 위치의 구문을 알 수는 없습니다. 내 0,0은 메인 모니터의 왼쪽 상단 근처에 있지만 거의 그렇지 않은 것 같습니다. 또한 두 번째 모니터는 기본 모니터의 왼쪽에 있습니다 (그리고 스크립트는 그러한 것을 허용하는 것처럼 보이지만 AutoIt 구문을 아직 읽지 않았습니다). 그러나 스크립트는 메인 모니터의 오른쪽에 프로그램을 열고 있습니다 ( "아무것도없는 곳"). 음수 값 (-1920,0)에 연결하려고 시도했지만 작동하지 않아 음수가 거부되었습니다. 조언 부탁드립니다. 귀하의 답변은 기쁨입니다. 많은 프로그램을위한 제 솔루션이 될 것입니다. 자세히 알아보기
Martin Zaske

8

듀얼 모니터 도구 사용 : 여러 화면 설정을 관리하는 무료 도구 세트입니다 .

에서 스왑 화면의 모든 화면을 차지을 극대화 할 수 있도록 도구 당신은 "특대 활성 창"에 단축키를 할당 할 수 있습니다.


2
Ultramon에서 온, 내가 원하는 것을 정확하게 수행하는 정상적인 기본값 (모두 비활성화)이있는 우수한 프로그램. 힌트 : "Supersize active window"단축키는 토글처럼 작동합니다. 다시 누르면 창이 복원됩니다.
Fanis

8

Jeff Axelrod는 AutoHotKey 를 사용 하는 훌륭한 솔루션 을 제공합니다 .

그는 Shift + Windows + Up모든 디스플레이에서 창을 최대화하기 위해 조합을 매핑하여 Windows 7의 Windows + Up단축키 를 보완 하여 한 모니터에서 선택한 창을 최대화합니다.

그의 코드는 다음과 같습니다 (Jeff 감사합니다).

;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

두 개의 화면과 두 개의 다른 그래픽 드라이버가있는 Windows 10 설치에서는 Shift + Windows + Up이 작동하지 않습니다. 여전히 다른 사람들에게 유용 할 수 있습니다.
Martin Zaske

3

nVidia 비디오 카드가있는 경우 :

  1. 바탕 화면을 마우스 오른쪽 버튼으로 클릭하고 "NVIDIA 제어판"을 클릭하십시오.
  2. 작업 목록의 맨 아래에있는 워크 스테이션에서 "모자이크 설정"이 있습니다. 클릭하세요.
  3. 오른쪽 창에서 "모자이크 활성화"옆의 확인란을 클릭하십시오.
  4. 디스플레이에서 결합하려는 모니터 옆에 확인 표시를합니다.
  5. 구성에서 원하는 토폴로지 (병렬, 수직)를 선택하십시오.
  6. 화면 오른쪽 하단에서 "적용"을 클릭하십시오.

이제 최대화 버튼을 클릭하면 두 모니터를 모두 다루게됩니다. 작업 표시 줄에도 두 모니터가 모두 포함됩니다. 그게 당신을 괴롭히는 경우, 모니터의 왼쪽으로 드래그하여 수직이되도록하십시오 (아이콘을 작게 만들고 '절대 결합하지 않음'을 사용하면 더 잘 작동합니다).



2

조금 늦었지만 인텔 통합 그래픽을 사용하는 경우 인텔 그래픽 제어판을 열고 디스플레이 메뉴를 선택한 다음 여러 디스플레이를 선택하고 "콜라주"를 선택하면 다른 선택과 함께 확장하려는 모니터를 선택할 수 있습니다 .

활성화 된 스크린 샷은 다음과 같습니다.

여기에 스크린 샷이 활성화되었습니다.


1

클릭하고 드래그하십시오. 그렇지 않으면 고급 그래픽 카드를 사용하여 모니터를 하나의 큰 화면으로 작동하도록 구성 할 수 있습니다.


0

내 Windows 7에서 창을 끌어서 두 화면을 모두 덮을 수 있습니다. 바탕 화면을 마우스 오른쪽 단추로 클릭하고 "화면 해상도"를 선택한 경우 "다중 디스플레이"에서 "이 디스플레이 확장"을 선택해야합니다. 창을 다시 닫으면 크기와 위치를 기억해야합니다.


사실, 바로 가기 또는 이와 유사한 방식으로 두 모니터의 창을 쉽게 최대화 할 수있는 솔루션을 찾고 있습니다.
Crackerjack

창 제목 표시 줄을 화면 상단으로 드래그하면됩니다.
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을 포함시킨 후에 작동합니다.
Max Hohenegger

0

이 해결 방법은 Sizer ( homepage ) 와 함께 사용합니다. 작은 프리웨어 유틸리티를 사용하면 창 늘이기 영역에서 마우스 오른쪽 버튼을 클릭하여 미리 정의 된 창 크기를 설정할 수 있습니다.

프로파일 세트를 작성하십시오.

  • 너비 = 모니터 너비의 합
  • 높이 = 모니터 높이-작업 표시 줄 높이 (= 40)
  • = 왼쪽 상단으로 이동하십시오.

그런 다음 마우스 오른쪽 단추를 클릭하여 창의 맨 아래를 마우스 오른쪽 단추로 클릭하고 프로파일을 선택하십시오.

여기에 이미지 설명을 입력하십시오


0

소프트웨어 나 코드없이이 작업을 수행 할 수있는 방법을 찾았습니다. 자동적이거나 완벽하지는 않지만 쉽지만 충분히 작동합니다.

  1. Windows + 왼쪽 또는 오른쪽 화살표 키를 사용하여 두 모니터의 가장 먼 가장자리에있는 모니터의 절반을 창에 맞 춥니 다
  2. 창의 가장자리를 잡고 두 모니터에서 반대쪽으로 끕니다.

0

창의 도구 모음을 마우스 오른쪽 단추로 클릭하고 복원을 선택한 다음 두 화면에서 크기를 조정하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.