Mam podwójne monitory i chcę rozszerzyć moje obecne okno, aby wyglądało jak jedno wielkie okno na obu monitorach. Czy ktoś wie, jak to zrobić natywnie w systemie Windows?
Mam podwójne monitory i chcę rozszerzyć moje obecne okno, aby wyglądało jak jedno wielkie okno na obu monitorach. Czy ktoś wie, jak to zrobić natywnie w systemie Windows?
Odpowiedzi:
W przeciwieństwie do tego, co mówią inni, tutaj jest bezpłatne, działające rozwiązanie, które maksymalizuje okno pod myszą.
(Podziękowania należą się facetowi, który napisał te niesamowite funkcje „autoit” - właśnie napisałem fragment, który ich używa).
Pobierz autoit i zainstaluj go (darmowe oprogramowanie):
http://www.autoitscript.com/site/autoit/
Utwórz plik .au3.
Wklej to w środku:
#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
Następnie zmień linię
WinMove ($ MyWin, „”, 0,0,3840,1165)
do wartości swoich upodobań.
Następnie możesz utworzyć skrót systemu Windows do tego pliku, kliknąć go prawym przyciskiem myszy-> właściwości i przypisać skrót (np. CTRL + ALT + UP).
Najprawdopodobniej okaże się, że będziesz musiał powtórzyć procedurę i utworzyć drugi plik, aby przywrócić okno do małego rozmiaru.
Mam nadzieję że to pomoże
Jeff Axelrod ma świetne rozwiązanie, które wykorzystuje AutoHotKey .
Mapuje Shift + Windows + Up
kombinację, aby zmaksymalizować okno na wszystkich ekranach, co uzupełnia Windows + Up
klawisz skrótu Windows 7 , który maksymalizuje wybrane okno na jednym monitorze.
Oto jego kod (dzięki 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
Użyj narzędzi Dual Monitor : to zestaw bezpłatnych narzędzi do zarządzania konfiguracją wielu ekranów.
W narzędziu Zamień ekran możesz przypisać klawisz skrótu do „Aktywnego okna Supersize”, aby zmaksymalizować go, aby zajmował wszystkie ekrany.
Jeśli masz kartę wideo nVidia:
Teraz, gdy klikniesz przycisk Maksymalizuj, obejmie on oba monitory. Twój pasek zadań obejmie również oba monitory. Jeśli to Cię wkurza, spróbuj przeciągnąć go na lewą stronę monitora, aby stał się pionowy (działa to lepiej, jeśli zmniejszysz ikony i użyjesz opcji „nigdy nie łącz”).
Używam do tego darmowego narzędzia VirtualScreenMaximizer:
http://virtualscreenmax.codeplex.com/releases/view/20213
Możesz dostosować skróty używane do maksymalizacji i przywracania, a podczas maksymalizacji rozszerzy okno nad paskiem zadań.
Nieco później, ale jeśli korzystasz ze zintegrowanej grafiki Intel, możesz otworzyć panel sterowania grafiką Intel, wybrać menu wyświetlania, a stamtąd wybrać wiele wyświetlaczy i wybrać „Kolaż”, to pozwoli ci wybrać, które monitory chcesz rozszerzyć wraz z innymi opcjami .
Oto zrzut ekranu z tego:
W moim systemie Windows 7 jestem w stanie przeciągnąć okno, aby obejmowało oba ekrany. Jeśli klikniesz prawym przyciskiem pulpit i wybierzesz „rozdzielczość ekranu”, musisz wybrać „rozszerzyć te ekrany” w „wielu ekranach”. Jeśli ponownie zamkniesz okno, powinno ono zapamiętać rozmiar i pozycję.
Jeśli ktoś nadal próbuje to zrobić za pomocą autoit , udało mi się to zrobić za pomocą tego kodu:
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
Korzystam z tego obejścia w Sizer ( strona główna ) - jego małe bezpłatne narzędzie pozwala ustawić wstępnie zdefiniowany rozmiar okna, klikając prawym przyciskiem myszy w obszarze Rozciągnięcie okna.
Wystarczy utworzyć zestaw profili:
Następnie kliknij prawym przyciskiem myszy prawym dolnym końcem okna i wybierz profil.
Znalazłem sposób na zrobienie tego bez żadnego oprogramowania ani kodu. To nie jest automatyczne ani idealne, ale jest łatwe i działa wystarczająco dobrze.
Kliknij prawym przyciskiem myszy pasek narzędzi systemu Windows, wybierz Przywróć, a następnie zmień jego rozmiar na obu ekranach.