Respuestas:
En contraste con lo que otros dicen, aquí hay una solución gratuita y funcional que maximiza la ventana que está debajo del mouse.
(Los créditos van al tipo que escribió estas increíbles funciones 'autoit', yo solo escribí el bit que las usa).
Descargue autoit e instálelo (software gratuito):
http://www.autoitscript.com/site/autoit/
Crea un archivo .au3.
Pega esto adentro:
#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
Luego cambia la línea
WinMove ($ MyWin, "", 0,0,3840,1165)
a los valores de tu agrado.
Luego puede crear un acceso directo de Windows a este archivo, hacer clic con el botón derecho en él> propiedades y asignar un acceso directo (por ejemplo, CTRL + ALT + ARRIBA).
Lo más probable es que necesites repetir el procedimiento y crear un segundo archivo para restaurar la ventana a un tamaño pequeño.
Espero que esto ayude
Jeff Axelrod tiene una gran solución que utiliza AutoHotKey .
Él mapea la Shift + Windows + Up
combinación para maximizar una ventana en todas las pantallas, lo que complementa la Windows + Up
tecla de acceso rápido de Windows 7 , que maximiza la ventana seleccionada en un monitor.
Aquí está su código (¡gracias 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
Utilice las herramientas de monitor dual : es un conjunto de herramientas gratuitas que administran la configuración de múltiples pantallas.
En la herramienta Cambiar pantalla , puede asignar una tecla de acceso rápido a la "Ventana activa de tamaño grande" para que pueda maximizarla y ocupar todas las pantallas.
Si tiene una tarjeta de video nVidia:
Ahora, cuando hace clic en el botón Maximizar, cubrirá ambos monitores. Su barra de tareas también cubrirá ambos monitores. Si eso le molesta, intente arrastrarlo hacia la izquierda del monitor para que quede vertical (esto funciona mejor si hace que los iconos sean pequeños y use 'nunca combinar').
Utilizo una utilidad gratuita para hacerlo, VirtualScreenMaximizer:
http://virtualscreenmax.codeplex.com/releases/view/20213
Puede personalizar los accesos directos para usar para maximizar y restaurar, y expandirá la ventana sobre la barra de tareas al maximizar.
Un poco tarde, pero si usa los gráficos integrados de Intel, puede abrir el panel de control de gráficos de Intel, seleccionar el menú de visualización y, desde allí, elegir múltiples pantallas y elegir "Collage", esto le permitirá elegir qué monitores desea ampliar junto con algunas otras opciones .
Aquí hay una captura de pantalla habilitada:
En mi Windows 7 puedo arrastrar la ventana para que cubra ambas pantallas. Si hace clic con el botón derecho en su escritorio y elige "resolución de pantalla", debe elegir "extender estas pantallas" en "pantallas múltiples". Si cierra la ventana nuevamente, debe recordar el tamaño y la posición.
Si alguien todavía está tratando de hacer esto usando autoit, lo hice usando este código:
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
Utilizo esta solución alternativa con Sizer ( página de inicio ): su pequeña utilidad de software gratuito le permite establecer el tamaño predefinido de las ventanas haciendo clic derecho en el área de estiramiento de la ventana.
Simplemente cree un conjunto de perfiles:
Luego, haga clic derecho en el extremo inferior derecho de la ventana y seleccione el perfil.
Encontré una manera de hacer esto sin ningún software o código. No es automático ni perfecto, pero es fácil y funciona lo suficientemente bien.
Haga clic derecho en la barra de herramientas de Windows, seleccione Restaurar, luego cambie su tamaño en ambas pantallas.