Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I have dual monitors and I want to span my current window so that it appears as one giant window on both monitors. Does anyone know how to do this natively from windows? If not, any free utilities that can do this?

share|improve this question
Related:… – Ƭᴇcʜιᴇ007 Jun 24 '12 at 20:44

In contrast with what others are saying, here is a free, working solution that maximises the window which is under the mouse.

(Credits go to the guy who wrote these amazing 'autoit' functions - I just wrote the bit which uses them.)

Download autoit and install it (free software):

Create a .au3 file.

Paste this inside:

#include <misc.au3>
#include <Array.au3>
HotKeySet('{ESC}', '_Exit')

Global $WinText, $OldMouse[2], $NewMouse[2], $Windows, $x, $MyWin, $MyCoords

$NewMouse = MouseGetPos()
$title = _GetWin()

Func _GetWin()
    Local $Coords
    $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
    If $x = UBound($Windows) Then $x -= 1
    $MyWin =  $Windows[$x][0]
    $Control = _MouseGetCtrlInfo()
    $Return = $Windows[$x][0] & @CRLF & $Control 
    Return $Return

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]
    Return $WinListArray

Func IsVisible($handle)
  If BitAnd( WinGetState($handle), 2 ) Then 
    Return 1
    Return 0

Func _Exit()

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
    ;_ArrayDisplay($sSplitClass, "")
    Return "No Ctrl"

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

Then change the line


to the values of your liking.

Then you can create a windows shortcut to this file, right click it->properties, and assign a shortcut (e.g. CTRL+ALT+UP).

Most likely you will find that you will need to repeat the procedure and create a second file to restore the window to a small size.

Hope this helps

share|improve this answer
Love it! I was going to use the NVidia mosaic, but the monitors I wanted to split across where from two separate graphics cards, and couldn't recable because of KVM not doing VGA. Only gotchya - I wasn't able to get the keyboard shortcut to work directly off a shortcut to the .au3 file. I was able to get a keyboard shortcut to work off a shortcut to a batch script that called the au3 script though. – paquetp Nov 29 '13 at 19:59
Indeed the shortcut method does not work, unless the script file is placed on your desktop. – nikos Dec 1 '13 at 11:39
For those having more than 2 monitors, the 0,0 in the line WinMove($MyWin,"",0,0,3840,1165) represents the coordinates of the starting point, so one may maximise across any amount of screens by changing these numbers accordingly. – ilakast Jul 28 '14 at 13:00

Use Dual Monitor Tools: it's a set of free tools do manage multiple screens setup.

In the Swap screen tool you can assign a hotkey to the "Supersize active window" so you can maximize it to occupy all the screens.

share|improve this answer
Excellent! Thanks! – Mikhail Feb 11 '15 at 11:22

I use a free utility to do so, VirtualScreenMaximizer:

You can customize the shortcuts to use for maximizing and restoring, and it will expand the window over the taskbar when maximizing.

share|improve this answer

Unless you have an ATi card with Eyefinity support, there is no way to extend a window to both screens. Unfortunately, there seems to be no free utility to do the same, there are couple of paid tools, including Ultramon.

share|improve this answer

Click and drag, otherwise you can use your advanced graphics card to configure the monitors to act as one large screen.

share|improve this answer

If you have an nVidia video card:

  1. Right-click on the desktop, and click "NVIDIA Control Panel"
  2. At the bottom of the list of tasks, under Workstation, is "Set up Mosaic". Click it.
  3. In the right pane, click the checkbox next to "Enable Mosaic"
  4. Under Displays, put checkmarks next to the monitors you want to combine.
  5. Under Configuration, select what topology you want (side-by-side, vertical..)
  6. At the bottom-right of the screen, click "Apply"

Now, when you click the Maximize button, it'll cover both monitors. Your taskbar will also cover both monitors. If that bugs you, try dragging it to the left of the monitor so it becomes vertical (this works better if you make the icons small and use 'never combine').

share|improve this answer

On my Windows 7 I'm able to drag the window so that it covers both screens. If you right click your desktop and chose "screen resolution", you have to chose "extend these displays" under "multiple displays". If you close the window again it should remember size and position.

share|improve this answer
That's true, I'm looking for a solution where you can easily maximize the window to both monitors with either a shortcut or something like that. – Crackerjack Sep 9 '10 at 16:57
aren't you able to do that by simply dragging the window title-bar to the to the top of the screen – subanki Sep 9 '10 at 17:05
@subanki - no, that'll just maximize the window on the current monitor (the one you "bumped") – Chris_K Sep 9 '10 at 20:06

If anyone is still trying to do this using autoit I managed do this using this 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

share|improve this answer
After including WinAPI.au3 and WindowsConstants.au3 this works. – Max Hohenegger Feb 23 at 10:38

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .