J'ai deux moniteurs et je veux étendre ma fenêtre actuelle pour qu'elle apparaisse comme une fenêtre géante sur les deux moniteurs. Est-ce que quelqu'un sait comment faire cela nativement dans Windows?
J'ai deux moniteurs et je veux étendre ma fenêtre actuelle pour qu'elle apparaisse comme une fenêtre géante sur les deux moniteurs. Est-ce que quelqu'un sait comment faire cela nativement dans Windows?
Réponses:
Contrairement à ce que disent d’autres, voici une solution gratuite et opérationnelle qui optimise la fenêtre sous la souris.
(Les crédits vont au gars qui a écrit ces étonnantes fonctions 'autoit' - je viens d'écrire le morceau qui les utilise.)
Téléchargez et installez automatiquement (logiciel gratuit):
http://www.autoitscript.com/site/autoit/
Créez un fichier .au3.
Collez ceci à l'intérieur:
#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
Puis change la ligne
WinMove ($ MyWin, "", 0,0,3840,1165)
aux valeurs de votre goût.
Ensuite, vous pouvez créer un raccourci Windows vers ce fichier, cliquer dessus avec le bouton droit de la souris -> propriétés, et attribuer un raccourci (par exemple, CTRL + ALT + HAUT).
Vous constaterez probablement que vous devrez répéter la procédure et créer un deuxième fichier pour restaurer la fenêtre à une taille réduite.
J'espère que cela t'aides
Jeff Axelrod a une excellente solution qui utilise AutoHotKey .
Il mappe la Shift + Windows + Up
combinaison pour maximiser une fenêtre sur tous les écrans, ce qui complète le Windows + Up
raccourci clavier de Windows 7 , qui maximise la fenêtre sélectionnée sur un moniteur.
Voici son code (merci 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
Utiliser les outils à double moniteur : c’est un ensemble d’ outils gratuits permettant de gérer la configuration de plusieurs écrans.
Dans l' outil Écran de permutation, vous pouvez affecter un raccourci clavier à la "Fenêtre active grand format" afin de pouvoir l'agrandir pour occuper tous les écrans.
Si vous avez une carte vidéo nVidia:
Désormais, lorsque vous cliquez sur le bouton Maximiser, les deux moniteurs sont couverts. Votre barre des tâches couvrira également les deux moniteurs. Si cela vous gêne, essayez de le faire glisser vers la gauche du moniteur afin qu'il devienne vertical (cela fonctionnera mieux si vous réduisez les icônes et utilisez «ne jamais combiner»).
J'utilise un utilitaire gratuit pour le faire, VirtualScreenMaximizer:
http://virtualscreenmax.codeplex.com/releases/view/20213
Vous pouvez personnaliser les raccourcis à utiliser pour la maximisation et la restauration. Cette fenêtre étend la fenêtre au-dessus de la barre des tâches lors de la maximisation.
Un peu tard, mais si vous utilisez Intel Graphics intégré, vous pouvez ouvrir le panneau de commande graphique Intel, sélectionner le menu Affichage, puis choisir plusieurs affichages et choisir "Collage". Vous pourrez ainsi choisir les moniteurs sur lesquels vous souhaitez étendre, ainsi que d'autres choix. .
Voici une capture d'écran de celui-ci activé:
Sur mon Windows 7, je peux faire glisser la fenêtre pour qu'elle couvre les deux écrans. Si vous cliquez avec le bouton droit de la souris sur votre bureau et que vous choisissez «résolution d'écran», vous devez choisir «étendre ces affichages» sous «affichages multiples». Si vous fermez à nouveau la fenêtre, vous devez vous rappeler de la taille et de la position.
Si quelqu'un essaie encore de faire cela en utilisant autoit, j'ai réussi à le faire en utilisant ce code:
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
J'utilise cette solution de contournement avec Sizer ( page d'accueil ). Son petit utilitaire gratuit vous permet de définir la taille prédéfinie de Windows en cliquant avec le bouton droit de la souris dans la zone d'étirement de la fenêtre.
Il suffit de créer un ensemble de profils:
Cliquez ensuite avec le bouton droit de la souris sur l’extrémité inférieure droite de la fenêtre et sélectionnez le profil.
J'ai trouvé un moyen de faire cela sans logiciel ou code. Ce n'est pas automatique ou parfait, mais c'est facile et fonctionne assez bien.
Faites un clic droit sur la barre d’outils de Windows, sélectionnez Restaurer, puis redimensionnez-le sur les deux écrans.