Максимізувати вікно на подвійні монітори в Windows?


Відповіді:


17

На відміну від того, що говорять інші, ось безкоштовне, робоче рішення, яке максимально збільшує вікно, яке знаходиться під мишею.

(Кредити йдуть тому хлопцеві, який написав ці дивовижні функції "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).

Швидше за все, ви виявите, що вам потрібно буде повторити процедуру та створити другий файл, щоб відновити вікно невеликого розміру.

Сподіваюся, це допомагає


1
Любіть це! Я збирався використовувати мозаїку NVidia, але монітори, які я хотів розділити там, де з двох окремих відеокарт, і не міг повторно використовувати, оскільки KVM не робить VGA. Тільки gotchya - мені не вдалося змусити комбінацію клавіш для роботи безпосередньо над ярликом до файлу .au3. Мені вдалося отримати комбінацію клавіш, щоб відпрацювати ярлик до пакетного сценарію, який називався сценарієм au3.
paquetp

1
Дійсно, метод ярлика не працює, якщо тільки файл сценарію не розміщений на вашому робочому столі.
nikos

1
Для тих, у кого більше 2 моніторів, 0,0 у рядку WinMove ($ MyWin, "", 0,0,3840,1165) представляє координати вихідної точки, тому можна змінювати будь-яку кількість екранів, змінюючи ці числа відповідно.
ilakast

Я повинен створити ярлик до цього maximize.au3 у програмі Win 10, а властивості цього ярлика дозволяють мені призначити ярлик клавіші; не потрібна партія.
Мартін Заске

@nikos цей скрипт працює для мене, але я не можу з'ясувати синтаксис для позиції Windows; здається, що мій 0,0 десь "біля" верхнього лівого мого основного монітора, але не зовсім. Також мій другий монітор знаходиться зліва від мого основного монітора (і сценарій, здається, дозволяє таке, але я ще не читав синтаксис AutoIt). Але сценарій відкриває мою програму праворуч від мого основного монітора (де "нічого"). Я спробував підключитися до від’ємного значення (-1920,0), але це не вийшло, негативні цифри відмовилися. Порадьте, будь ласка. Ваша відповідь - це радість, буде моїм рішенням для багатьох програм, просто потрібно дізнатися більше
Мартін Заске,

9

Джефф Аксельрод має чудове рішення, яке використовує 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

Shift + Windows + Up не працює в моїй установці Windows 10 з двома екранами та двома різними драйверами графіки. Ще потенційно корисний для інших.
Мартін Заске

8

Використовуйте інструменти подвійного монітора : це набір безкоштовних інструментів, які керують налаштуванням кількох екранів.

За допомогою екрана інструменту " Зміна" ви можете призначити гарячу клавішу "Суперрозмір активного вікна", щоб ви могли максимально зайняти всі екрани.


2
Відмінна програма з нормальними налаштуваннями за замовчуванням (усі відключені), яка робить саме те, що я шукав, приїжджаючи від Ultramon. Підказка: клавіша швидкого доступу до "Суперрозмір активного вікна" діє як перемикання. Вдавши його знову, відновлює вікно.
Фаніс

3

Якщо у вас є відеокарта nVidia:

  1. Клацніть правою кнопкою миші на робочому столі та натисніть «Панель управління NVIDIA»
  2. Унизу списку завдань під робочою станцією розміщено "Налаштувати мозаїку". Клацніть по ньому.
  3. На правій панелі встановіть прапорець біля пункту "Увімкнути мозаїку"
  4. У розділі "Дисплеї" поставте галочки біля моніторів, які потрібно поєднати.
  5. У розділі "Конфігурація" виберіть потрібну топологію (поруч, вертикаль.)
  6. У правій нижній частині екрана натисніть «Застосувати»

Тепер, коли ви натиснете кнопку "Максимально", вона охопить обидва монітори. Ваша панель завдань також охопить обидва монітори. Якщо це клопоче вас, спробуйте перетягнути його зліва від монітора, щоб він став вертикальним (це працює краще, якщо ви робите піктограми маленькими та використовуєте "ніколи не поєднувати").


2

Для цього я використовую безкоштовну утиліту, VirtualScreenMaximizer:

http://virtualscreenmax.codeplex.com/releases/view/20213

Ви можете налаштувати ярлики, які використовуватимуться для максимізації та відновлення, і це розширить вікно на панелі завдань при максимізації.


2

Трохи запізнюючись, але якщо за допомогою інтегрованої графіки Intel ви можете відкрити панель управління графікою Intel, вибрати меню дисплея, а потім вибрати декілька дисплеїв і вибрати "Collage", це дозволить вам вибрати, на які монітори ви хочете поширити разом з деякими іншими варіантами .

Ось включений скріншот:

Тут увімкнено скріншот


1

Клацніть і перетягніть, інакше ви можете використовувати розширену відеокарту, щоб налаштувати монітори як один великий екран.


0

У моєму Windows 7 я можу перетягнути вікно, щоб воно охоплювало обидва екрани. Якщо ви клацніть правою кнопкою миші на робочому столі та вибрали "Роздільна здатність екрана", виберіть "Розширити ці дисплеї" під "декількома екранами". Якщо ви знову закриєте вікно, воно повинно пам’ятати розмір та положення.


Це правда, я шукаю рішення, де ви можете легко збільшити вікно до обох моніторів за допомогою ярлика чи чогось подібного.
Crackerjack

чи не в змозі це зробити, просто перетягнувши рядок заголовка вікна на верхню частину екрана
subanki

@subanki - ні, це просто збільшить вікно на поточному моніторі (той, на який ви "натрапили")
Chris_K

0

Якщо хтось все ще намагається зробити це за допомогою 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

Після включення WinAPI.au3 та WindowsConstants.au3 це працює.
Макс Хохенггер

0

Я використовую це рішення із Sizer ( домашня сторінка ) - його невелика безкоштовна утиліта дозволяє встановити заздалегідь заданий розмір вікна, клацнувши правою кнопкою миші в області розтягування вікна.

Просто створіть набір профілів:

  • Ширина = сума ширини моніторів
  • Висота = Висота монітора - висота панелі завдань (= 40)
  • Перемістіться до = вліво вгорі

Потім клацніть правою кнопкою миші праворуч у нижній частині вікна та виберіть профіль.

введіть тут опис зображення


0

Я знайшов спосіб це зробити без будь-якого програмного забезпечення чи коду. Це не автоматично або ідеально, але це легко і працює досить добре.

  1. Windows + клавіша зі стрілкою вліво або вправо, щоб прикріпити вікно до половини монітора на крайньому краю двох моніторів
  2. Візьміться за край вікна та перетягніть його по обох моніторах у далеку сторону

0

Клацніть правою кнопкою миші на панелі інструментів Windows, виберіть «Відновити», а потім змінити розмір на обох екранах.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.