web-dev-qa-db-fra.com

Maximiser une fenêtre sur deux moniteurs 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?

42
Crackerjack

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

16
nikos

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
8
Ryan

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.

7
Max

Si vous avez une carte vidéo nVidia:

  1. Cliquez avec le bouton droit sur le bureau, puis cliquez sur "Panneau de configuration NVIDIA".
  2. Au bas de la liste des tâches, sous Poste de travail, se trouve "Configurer la mosaïque". Cliquez dessus.
  3. Dans le volet de droite, cochez la case "Activer la mosaïque".
  4. Sous Affichages, cochez les écrans à combiner.
  5. Sous Configuration, sélectionnez la topologie souhaitée (côte à côte, verticale, etc.).
  6. En bas à droite de l'écran, cliquez sur "Appliquer".

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").

3
michaelmoo

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.

2
amloessb

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é:

Heres a screenshot of it enabled

2
Brad

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.

1
Garrett

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.

0
CGA

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
0
Finn van Damme

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:

  • Largeur = somme des largeurs des moniteurs
  • Hauteur = hauteur du moniteur - hauteur de la barre des tâches (= 40)
  • Déplacer vers = en haut à gauche.

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.

enter image description here

0
Lluser