Ответы:
В отличие от того, что говорят другие, вот бесплатное, работающее решение, которое максимизирует окно, которое находится под мышью.
(Кредиты идут парню, который написал эти удивительные функции autoit - я просто написал бит, который их использует.)
Скачайте autoit и установите его (бесплатное программное обеспечение):
http://www.autoitscript.com/site/autoit/
Создайте файл .au3.
Вставьте это внутри:
#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
Затем измените строку
WinMove ($ MyWin, "", 0,0,3840,1165)
ценностям по вашему вкусу.
Затем вы можете создать ярлык Windows для этого файла, щелкнуть его правой кнопкой мыши -> Свойства и назначить ярлык (например, CTRL + ALT + UP).
Скорее всего, вы обнаружите, что вам нужно будет повторить процедуру и создать второй файл, чтобы восстановить окно небольшого размера.
Надеюсь это поможет
У Джеффа Аксельрода есть отличное решение , использующее AutoHotKey .
Он отображает Shift + Windows + Up
комбинацию, чтобы максимизировать окно на всех дисплеях, что дополняет Windows + Up
горячую клавишу Windows 7 , которая максимизирует выбранное окно на одном мониторе.
Вот его код (спасибо, Джефф!):
;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
Используйте Dual Monitor Tools : это набор бесплатных инструментов для управления настройкой нескольких экранов.
В инструменте замены экрана вы можете назначить горячую клавишу «Активному окну большого размера», чтобы развернуть ее на все экраны.
Если у вас есть видеокарта nVidia:
Теперь, когда вы нажмете кнопку «Развернуть», она охватит оба монитора. Ваша панель задач также будет охватывать оба монитора. Если это вас не устраивает, попробуйте перетащить его влево от монитора, чтобы он стал вертикальным (это будет лучше, если вы сделаете значки маленькими и используете «никогда не комбинировать»).
Для этого я использую бесплатную утилиту VirtualScreenMaximizer:
http://virtualscreenmax.codeplex.com/releases/view/20213
Вы можете настроить ярлыки, которые будут использоваться для максимизации и восстановления, и при развертывании окно будет расширено над панелью задач.
Немного поздно, но если вы используете встроенную графику Intel, вы можете открыть панель управления графикой Intel, выбрать меню дисплея и оттуда выбрать несколько дисплеев и выбрать «Коллаж», это позволит вам выбрать мониторы, которые вы хотели бы расширить, а также некоторые другие варианты. ,
Вот снимок экрана, на котором он включен:
На моем Windows 7 я могу перетащить окно так, чтобы оно закрывало оба экрана. Если вы щелкнете правой кнопкой мыши по своему рабочему столу и выберете «разрешение экрана», вы должны выбрать «расширить эти дисплеи» в разделе «несколько дисплеев». Если вы снова закроете окно, оно должно запомнить размер и положение.
Если кто-то все еще пытается сделать это с помощью autoit, мне удалось сделать это с помощью этого кода:
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
Я использую этот обходной путь с Sizer ( домашняя страница ) - его небольшая бесплатная утилита позволяет вам устанавливать предопределенный размер окон, щелкая правой кнопкой мыши в области растягивания окна.
Просто создайте набор профилей:
Затем просто щелкните правой кнопкой мыши в правом нижнем углу окна и выберите профиль.
Я нашел способ сделать это без какого-либо программного обеспечения или кода. Он не является автоматическим или идеальным, но он прост и работает достаточно хорошо.
Щелкните правой кнопкой мыши на панели инструментов Windows, выберите «Восстановить», затем измените размер на обоих экранах.