У меня есть два монитора, и я хочу расширить свое текущее окно, чтобы оно отображалось как одно гигантское окно на обоих мониторах. Кто-нибудь знает, как это сделать в Windows?
9 ответов
В отличие от того, что говорят другие, вот бесплатное, работающее решение, которое максимизирует окно, которое находится под мышью.
(Авторы идут за парнем, который написал эти удивительные функции 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 7 Windows + Up
, которая максимизирует выбранное окно на одном мониторе.
Вот его код (спасибо, Джефф!):
;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:
- Щелкните правой кнопкой мыши на рабочем столе и выберите "Панель управления 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