Tối đa hóa một cửa sổ trên màn hình kép trong Windows?


Câu trả lời:


17

Ngược lại với những gì người khác đang nói, đây là một giải pháp làm việc miễn phí, tối đa hóa cửa sổ nằm dưới con chuột.

(Tín dụng dành cho anh chàng đã viết các chức năng 'tự động' tuyệt vời này - Tôi chỉ viết bit sử dụng chúng.)

Tải về autoit và cài đặt nó (phần mềm miễn phí):

http://www.autoitscript.com/site/autoit/

Tạo một tập tin .au3.

Dán cái này vào bên trong:

#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

Sau đó thay đổi dòng

WinMove ($ MyWin, "", 0,0,3840,1165)

theo các giá trị theo ý thích của bạn.

Sau đó, bạn có thể tạo lối tắt windows cho tệp này, nhấp chuột phải vào nó-> thuộc tính và gán phím tắt (ví dụ: CTRL + ALT + UP).

Nhiều khả năng bạn sẽ thấy rằng bạn sẽ cần phải lặp lại quy trình và tạo một tệp thứ hai để khôi phục cửa sổ về kích thước nhỏ.

Hi vọng điêu nay co ich


1
Yêu nó! Tôi sẽ sử dụng khảm NVidia, nhưng các màn hình tôi muốn tách ra từ hai card đồ họa riêng biệt và không thể thu hồi được do KVM không làm VGA. Chỉ có gotchya - Tôi không thể có được phím tắt để làm việc trực tiếp với một phím tắt đến tệp .au3. Tôi đã có thể có được một phím tắt để làm việc với một phím tắt đến một tập lệnh bó được gọi là tập lệnh au3.
paquetp

1
Thật vậy, phương pháp phím tắt không hoạt động, trừ khi tệp script được đặt trên màn hình của bạn.
nikos

1
Đối với những người có nhiều hơn 2 màn hình, 0,0 trong dòng WinMove ($ MyWin, "", 0,0,3840,1165) đại diện cho tọa độ của điểm bắt đầu, do đó, một người có thể tối đa hóa bất kỳ số lượng màn hình nào bằng cách thay đổi những con số này cho phù hợp.
ilakast

Tôi phải tạo một lối tắt đến max.au3 này trong Win 10 và các thuộc tính của phím tắt cho phép tôi gán phím tắt; không cần lô.
Martin Zaske

@nikos tập lệnh này hoạt động với tôi nhưng tôi không thể tìm ra cú pháp cho vị trí cửa sổ; có vẻ như 0,0 của tôi ở đâu đó "gần" phía trên bên trái màn hình chính của tôi nhưng không hoàn toàn. Ngoài ra màn hình thứ hai của tôi nằm ở bên trái màn hình chính của tôi (và tập lệnh dường như cho phép như vậy, nhưng tôi chưa đọc cú pháp AutoIt). Nhưng kịch bản đang mở chương trình của tôi ở bên phải màn hình chính của tôi (nơi không có "gì"). Tôi đã thử nối vào một giá trị âm (-1920,0) nhưng không được, các số âm đã từ chối. Xin tư vấn. Câu trả lời của bạn là một niềm vui, sẽ là giải pháp của tôi cho nhiều chương trình, chỉ cần tìm hiểu thêm
Martin Zaske

9

Jeff Axelrod có một giải pháp tuyệt vời sử dụng AutoHotKey .

Anh ta ánh xạ sự Shift + Windows + Upkết hợp để tối đa hóa một cửa sổ trên tất cả các màn hình, điều này khen ngợi Windows + Upphím nóng của Windows 7 , giúp tối đa hóa cửa sổ được chọn trong một màn hình.

Đây là mã của anh ấy (cảm ơn 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

Shift + Windows + Up không hoạt động trên thiết lập Windows 10 của tôi với hai màn hình và hai trình điều khiển đồ họa khác nhau. Vẫn có khả năng hữu ích cho người khác.
Martin Zaske

8

Sử dụng Công cụ màn hình kép : đó là một bộ công cụ miễn phí quản lý nhiều thiết lập màn hình.

Trong công cụ màn hình Hoán đổi, bạn có thể gán một phím nóng cho "Cửa sổ siêu kích hoạt" để bạn có thể tối đa hóa nó để chiếm tất cả các màn hình.


2
Chương trình tuyệt vời với mặc định lành mạnh (tất cả bị vô hiệu hóa) thực hiện chính xác những gì tôi đang tìm kiếm, đến từ Ultramon. Một gợi ý: phím nóng để "Thay thế cửa sổ hoạt động" hoạt động giống như một nút chuyển đổi. Đánh nó một lần nữa khôi phục lại cửa sổ.
Fanis

3

Nếu bạn có thẻ video nVidia:

  1. Nhấp chuột phải vào màn hình nền và nhấp vào "Bảng điều khiển NVIDIA"
  2. Ở dưới cùng của danh sách các tác vụ, bên dưới Máy trạm, là "Thiết lập Khảm". Nhấp vào nó.
  3. Trong khung bên phải, nhấp vào hộp kiểm bên cạnh "Bật khảm"
  4. Trong phần Hiển thị, đặt dấu kiểm bên cạnh màn hình bạn muốn kết hợp.
  5. Trong Cấu hình, chọn cấu trúc liên kết bạn muốn (cạnh nhau, dọc ..)
  6. Ở dưới cùng bên phải của màn hình, nhấp vào "Áp dụng"

Bây giờ, khi bạn nhấp vào nút Tối đa hóa, nó sẽ che cả hai màn hình. Thanh tác vụ của bạn cũng sẽ bao gồm cả hai màn hình. Nếu điều đó làm phiền bạn, hãy thử kéo nó sang bên trái màn hình để màn hình trở nên thẳng đứng (điều này hoạt động tốt hơn nếu bạn làm cho các biểu tượng nhỏ lại và sử dụng 'không bao giờ kết hợp').



2

Hơi muộn một chút nhưng nếu sử dụng đồ họa tích hợp Intel, bạn có thể mở bảng điều khiển đồ họa Intel, chọn menu hiển thị và từ đó chọn nhiều màn hình và chọn "Ghép ảnh", điều này sẽ cho phép bạn chọn màn hình nào bạn muốn mở rộng cùng với một số lựa chọn khác .

Đây là một ảnh chụp màn hình của nó được kích hoạt:

Đây là một ảnh chụp màn hình của nó được kích hoạt


1

Nhấp và kéo, nếu không, bạn có thể sử dụng thẻ đồ họa nâng cao của mình để định cấu hình màn hình hoạt động như một màn hình lớn.


0

Trên Windows 7 của tôi, tôi có thể kéo cửa sổ để nó che cả hai màn hình. Nếu bạn nhấp chuột phải vào máy tính để bàn của bạn và chọn "độ phân giải màn hình", bạn phải chọn "mở rộng các màn hình này" trong "nhiều màn hình". Nếu bạn đóng cửa sổ một lần nữa, nó sẽ nhớ kích thước và vị trí.


Đó là sự thật, tôi đang tìm kiếm một giải pháp trong đó bạn có thể dễ dàng tối đa hóa cửa sổ cho cả hai màn hình bằng một phím tắt hoặc một cái gì đó tương tự.
Crackerjack

không phải bạn có thể làm điều đó bằng cách chỉ cần kéo thanh tiêu đề cửa sổ lên trên cùng của màn hình
subanki

@subanki - không, điều đó sẽ chỉ tối đa hóa cửa sổ trên màn hình hiện tại (màn hình bạn "bị va chạm")
Chris_K

0

Nếu ai vẫn đang cố gắng để làm điều này bằng AutoIt tôi quản lý thực hiện điều này sử dụng mã này:

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

Sau khi bao gồm WinAPI.au3 và WindowsConstants.au3, nó hoạt động.
Max Hohenegger

0

Tôi sử dụng cách giải quyết này với Sizer ( trang chủ ) - tiện ích phần mềm miễn phí nhỏ của nó cho phép bạn đặt kích thước cửa sổ được xác định trước bằng cách nhấp chuột phải vào vùng Mở rộng cửa sổ.

Chỉ cần tạo bộ hồ sơ:

  • Chiều rộng = tổng chiều rộng màn hình
  • Chiều cao = Chiều cao màn hình - chiều cao thanh tác vụ (= 40)
  • Di chuyển đến = Trên cùng bên trái.

Sau đó chỉ cần nhấp chuột phải vào cuối bên phải của Cửa sổ và chọn hồ sơ.

nhập mô tả hình ảnh ở đây


0

Tôi tìm thấy một cách để làm điều này mà không cần bất kỳ phần mềm hoặc mã. Nó không tự động hoặc hoàn hảo, nhưng dễ dàng và hoạt động đủ tốt.

  1. Phím mũi tên trái hoặc phải của Windows để chụp cửa sổ tới một nửa màn hình ở cạnh xa của hai màn hình
  2. Nắm lấy cạnh của cửa sổ và kéo nó qua cả hai màn hình về phía xa

0

Nhấp chuột phải vào thanh công cụ của windows, chọn Khôi phục, sau đó thay đổi kích thước trên cả hai màn hình.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.