Ich habe zwei Monitore und möchte mein aktuelles Fenster so aufteilen, dass es auf beiden Monitoren als ein riesiges Fenster angezeigt wird. Weiß jemand, wie man dies nativ in Windows macht?
Ich habe zwei Monitore und möchte mein aktuelles Fenster so aufteilen, dass es auf beiden Monitoren als ein riesiges Fenster angezeigt wird. Weiß jemand, wie man dies nativ in Windows macht?
Antworten:
Im Gegensatz zu dem, was andere sagen, gibt es hier eine kostenlose, funktionierende Lösung, die das Fenster unter der Maus maximiert.
(Dank geht an denjenigen, der diese erstaunlichen 'Autoit'-Funktionen geschrieben hat - ich habe nur das Bit geschrieben, das sie verwendet.)
Laden Sie autoit herunter und installieren Sie es (kostenlose Software):
http://www.autoitscript.com/site/autoit/
Erstellen Sie eine .au3-Datei.
Fügen Sie dies ein:
#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
Dann ändern Sie die Zeile
WinMove ($ MyWin, "", 0,0,3840,1165)
nach Ihren Wünschen.
Anschließend können Sie eine Windows-Verknüpfung zu dieser Datei erstellen, mit der rechten Maustaste darauf klicken -> Eigenschaften und eine Verknüpfung zuweisen (z. B. STRG + ALT + NACH OBEN).
Höchstwahrscheinlich werden Sie feststellen, dass Sie den Vorgang wiederholen und eine zweite Datei erstellen müssen, um das Fenster auf eine kleine Größe zurückzusetzen.
Hoffe das hilft
Jeff Axelrod hat eine großartige Lösung , die AutoHotKey verwendet .
Er ordnet die Shift + Windows + Up
Kombination zu, um ein Fenster über alle Bildschirme hinweg zu maximieren. Dies ergänzt die Tastenkombination von Windows 7 Windows + Up
, mit der das ausgewählte Fenster auf einem Monitor maximiert wird.
Hier ist sein Code (danke 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
Verwenden Sie Dual-Monitor-Tools : Es handelt sich um eine Reihe kostenloser Tools, mit denen Sie die Einrichtung mehrerer Bildschirme verwalten können.
Im Swap Screen Tool können Sie dem "Supersize active window" einen Hotkey zuweisen, um es so zu maximieren, dass es alle Bildschirme belegt.
Wenn Sie eine nVidia-Grafikkarte haben:
Wenn Sie jetzt auf die Schaltfläche Maximieren klicken, werden beide Monitore abgedeckt. Ihre Taskleiste deckt auch beide Monitore ab. Wenn das Sie stört, ziehen Sie es auf die linke Seite des Monitors, damit es vertikal wird (dies funktioniert besser, wenn Sie die Symbole klein machen und "Nie kombinieren" verwenden).
Ich verwende dazu ein kostenloses Dienstprogramm, VirtualScreenMaximizer:
http://virtualscreenmax.codeplex.com/releases/view/20213
Sie können die Verknüpfungen anpassen, die zum Maximieren und Wiederherstellen verwendet werden sollen. Beim Maximieren wird das Fenster über der Taskleiste erweitert.
Etwas zu spät, aber wenn Sie integrierte Intel-Grafik verwenden, können Sie das Intel-Grafik-Control-Panel öffnen, das Anzeigemenü auswählen und von dort aus mehrere Anzeigen auswählen und "Collage" auswählen. Auf diese Weise können Sie auswählen, über welche Monitore Sie mit einigen anderen Optionen erweitern möchten .
Hier ist ein Screenshot davon aktiviert:
Unter Windows 7 kann ich das Fenster so ziehen, dass es beide Bildschirme abdeckt. Wenn Sie mit der rechten Maustaste auf Ihren Desktop klicken und "Bildschirmauflösung" auswählen, müssen Sie "Diese Anzeigen erweitern" unter "Mehrere Anzeigen" auswählen. Wenn Sie das Fenster wieder schließen, sollte es sich an Größe und Position erinnern.
Wenn noch jemand versucht, dies mit autoit zu tun, habe ich es mit folgendem Code geschafft:
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
Ich verwende diese Problemumgehung für Sizer ( Homepage ). Mit dem kleinen Freeware-Dienstprogramm können Sie die vordefinierte Fenstergröße festlegen, indem Sie mit der rechten Maustaste in den Fensterdehnungsbereich klicken.
Erstellen Sie einfach ein Profilset:
Klicken Sie dann mit der rechten Maustaste auf das rechte untere Ende des Fensters und wählen Sie das Profil aus.
Ich habe einen Weg gefunden, dies ohne Software oder Code zu tun. Es ist nicht automatisch oder perfekt, aber es ist einfach und funktioniert gut genug.
Klicken Sie mit der rechten Maustaste auf die Symbolleiste des Fensters, wählen Sie Wiederherstellen und ändern Sie die Größe in beiden Bildschirmen.