Ho due monitor e voglio estendere la mia finestra attuale in modo che appaia come una finestra gigante su entrambi i monitor. Qualcuno sa come farlo nativamente in Windows?
Ho due monitor e voglio estendere la mia finestra attuale in modo che appaia come una finestra gigante su entrambi i monitor. Qualcuno sa come farlo nativamente in Windows?
Risposte:
Contrariamente a quanto dicono gli altri, ecco una soluzione gratuita e funzionante che massimizza la finestra che si trova sotto il mouse.
(I crediti vanno al ragazzo che ha scritto queste incredibili funzioni di "autoit" - ho appena scritto il bit che le usa.)
Scarica autoit e installalo (software gratuito):
http://www.autoitscript.com/site/autoit/
Crea un file .au3.
Incolla questo dentro:
#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
Quindi cambia linea
WinMove ($ MyWin, "", 0,0,3840,1165)
ai valori di tuo gradimento.
Quindi è possibile creare un collegamento di Windows a questo file, fare clic con il pulsante destro del mouse su-> proprietà e assegnare un collegamento (ad esempio CTRL + ALT + SU).
Molto probabilmente scoprirai che dovrai ripetere la procedura e creare un secondo file per ripristinare le dimensioni ridotte della finestra.
Spero che sia di aiuto
Jeff Axelrod ha un'ottima soluzione che utilizza AutoHotKey .
Mappa la Shift + Windows + Up
combinazione per ingrandire una finestra su tutti i display, il che complimenta il Windows + Up
tasto di scelta rapida di Windows 7 , che massimizza la finestra selezionata in un monitor.
Ecco il suo codice (grazie 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
Usa gli strumenti Dual Monitor : è un set di strumenti gratuiti che gestiscono la configurazione di più schermi.
Nello strumento Scambia schermo è possibile assegnare un tasto di scelta rapida alla "Finestra attiva di grandi dimensioni" in modo da poterlo ingrandire per occupare tutte le schermate.
Se hai una scheda video nVidia:
Ora, quando fai clic sul pulsante Massimizza, coprirà entrambi i monitor. La barra delle applicazioni coprirà anche entrambi i monitor. Se ti dà fastidio, prova a trascinarlo a sinistra del monitor in modo che diventi verticale (funziona meglio se riduci le icone e usi "non combinare mai").
Uso un'utilità gratuita per farlo, VirtualScreenMaximizer:
http://virtualscreenmax.codeplex.com/releases/view/20213
È possibile personalizzare le scorciatoie da utilizzare per ingrandire e ripristinare, e si espanderà la finestra sulla barra delle applicazioni durante l'ingrandimento.
Un po 'in ritardo, ma se si utilizza la grafica integrata Intel è possibile aprire il pannello di controllo della grafica Intel, selezionare il menu di visualizzazione e da lì scegliere più schermi e scegliere "Collage", questo ti permetterà di scegliere quali monitor vuoi estendere insieme ad alcune altre scelte .
Ecco uno screenshot abilitato:
Sul mio Windows 7 sono in grado di trascinare la finestra in modo che copra entrambe le schermate. Se fai clic con il pulsante destro del mouse sul desktop e scegli "risoluzione schermo", devi scegliere "estendi questi schermi" sotto "schermi multipli". Se si chiude di nuovo la finestra, è necessario ricordare dimensioni e posizione.
Se qualcuno sta ancora provando a farlo usando autoit, sono riuscito a farlo usando questo codice:
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
Uso questa soluzione alternativa con Sizer ( homepage ): la sua piccola utility freeware ti consente di impostare le dimensioni predefinite di Windows facendo clic con il pulsante destro del mouse nell'area di allungamento della finestra.
Basta creare un set di profili:
Quindi fai clic con il pulsante destro del mouse sull'estremità inferiore destra della finestra e seleziona il profilo.
Ho trovato un modo per farlo senza alcun software o codice. Non è automatico o perfetto, ma è facile e funziona abbastanza bene.
Fare clic con il tasto destro sulla barra degli strumenti di Windows, selezionare Ripristina, quindi ridimensionarla su entrambe le schermate.