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?
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 changez de 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, puis 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 combinaison Shift + Windows + Up
afin de maximiser une fenêtre sur tous les affichages, ce qui complète le raccourci clavier Windows + Up
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
Utilisez Outils pour double moniteur: c'est un ensemble de outils gratuitsgérer la configuration de plusieurs écrans.
Dans l’outil Permuter l’écran, vous pouvez affecter un raccourci clavier à la "Fenêtre active grand format" afin de pouvoir l’agrandir de manière à 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. La fenêtre sera ensuite étendue 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 que vous souhaitez étendre, ainsi que d'autres choix. .
Voici une capture d'écran de celui-ci activé:
Cliquez et faites glisser, sinon vous pouvez utiliser votre carte graphique avancée pour configurer les moniteurs afin qu'ils agissent comme un grand écran.
Sur mon Windows 7, je peux faire glisser la fenêtre afin 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 par un clic droit 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.