Відповіді:
На відміну від того, що говорять інші, ось безкоштовне, робоче рішення, яке максимально збільшує вікно, яке знаходиться під мишею.
(Кредити йдуть тому хлопцеві, який написав ці дивовижні функції "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
Використовуйте інструменти подвійного монітора : це набір безкоштовних інструментів, які керують налаштуванням кількох екранів.
За допомогою екрана інструменту " Зміна" ви можете призначити гарячу клавішу "Суперрозмір активного вікна", щоб ви могли максимально зайняти всі екрани.
Якщо у вас є відеокарта nVidia:
Тепер, коли ви натиснете кнопку "Максимально", вона охопить обидва монітори. Ваша панель завдань також охопить обидва монітори. Якщо це клопоче вас, спробуйте перетягнути його зліва від монітора, щоб він став вертикальним (це працює краще, якщо ви робите піктограми маленькими та використовуєте "ніколи не поєднувати").
Для цього я використовую безкоштовну утиліту, VirtualScreenMaximizer:
http://virtualscreenmax.codeplex.com/releases/view/20213
Ви можете налаштувати ярлики, які використовуватимуться для максимізації та відновлення, і це розширить вікно на панелі завдань при максимізації.
Трохи запізнюючись, але якщо за допомогою інтегрованої графіки Intel ви можете відкрити панель управління графікою Intel, вибрати меню дисплея, а потім вибрати декілька дисплеїв і вибрати "Collage", це дозволить вам вибрати, на які монітори ви хочете поширити разом з деякими іншими варіантами .
Ось включений скріншот:
У моєму 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, виберіть «Відновити», а потім змінити розмір на обох екранах.