ขยายหน้าต่างให้ใหญ่ขึ้นเป็นจอภาพคู่ใน Windows หรือไม่


43

ฉันมีจอภาพสองจอและฉันต้องการขยายหน้าต่างปัจจุบันของฉันเพื่อให้ปรากฏเป็นหน้าต่างขนาดใหญ่หนึ่งหน้าต่างบนจอภาพทั้งสอง ไม่มีใครรู้วิธีการทำสิ่งนี้ใน Windows หรือไม่


ที่เกี่ยวข้อง: superuser.com/questions/3004/…
Ƭᴇcʜιᴇ007

คำตอบ:


16

ตรงกันข้ามกับสิ่งที่คนอื่นพูดนี่เป็นวิธีแก้ปัญหาการทำงานฟรีที่เพิ่มหน้าต่างที่อยู่ใต้เมาส์ให้ใหญ่ที่สุด

(เครดิตไปที่คนที่เขียนฟังก์ชัน 'autoit' ที่น่าทึ่งเหล่านี้ - ฉันเพิ่งเขียนบิตที่ใช้พวกเขา)

ดาวน์โหลด autoit และติดตั้ง (ซอฟต์แวร์ฟรี):

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

สร้างไฟล์. aau3

วางสิ่งนี้ไว้ข้างใน:

#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

ฉันต้องสร้างทางลัดไปยัง max.au นี้ 3 ใน Win 10 และคุณสมบัติของทางลัดให้ฉันกำหนดคีย์ลัด ไม่จำเป็นต้องแบทช์
Martin Zaske

@ Nikos สคริปต์นี้ใช้งานได้สำหรับฉัน แต่ฉันไม่สามารถหาไวยากรณ์สำหรับตำแหน่ง windows ได้ ดูเหมือนว่า 0,0 ของฉันจะอยู่ที่ไหนสักแห่ง "ใกล้" ด้านบนซ้ายของหน้าจอหลัก แต่ไม่มาก อีกทั้งจอที่สองของฉันก็อยู่ทางด้านซ้ายของจอมอนิเตอร์หลักของฉัน (และดูเหมือนว่าสคริปต์จะอนุญาตเช่นนั้น แต่ฉันยังไม่ได้อ่านไวยากรณ์ของ AutoIt) แต่สคริปต์กำลังเปิดโปรแกรมของฉันทางด้านขวาของหน้าจอหลักของฉัน (ซึ่งไม่มี "อะไร") ฉันลองเชื่อมต่อกับค่าลบ (-1920,0) แต่นั่นไม่ได้ผลตัวเลขติดลบปฏิเสธ กรุณาแนะนำ คำตอบของคุณคือความสุขจะเป็นทางออกของฉันสำหรับหลาย ๆ โปรแกรมเพียงแค่ต้องเรียนรู้เพิ่มเติม
Martin Zaske

8

ใช้เครื่องมือการตรวจสอบสองทาง : เป็นชุดเครื่องมือฟรีที่จัดการการตั้งค่าหน้าจอหลายหน้าจอ

ในเครื่องมือสลับหน้าจอคุณสามารถกำหนดฮอตคีย์ให้กับ "หน้าต่างที่ใช้งานเพิ่มขนาดใหญ่" เพื่อให้คุณสามารถขยายให้ใหญ่สุดเพื่อครอบครองทุกหน้าจอ


2
โปรแกรมที่ยอดเยี่ยมพร้อมค่าเริ่มต้นที่ดี (ปิดการใช้งานทั้งหมด) ที่ทำสิ่งที่ฉันกำลังมองหาอย่างแท้จริงมาจาก Ultramon คำใบ้: ปุ่มลัดของ "Supersize active window" ทำหน้าที่เหมือนสลับ กดปุ่มอีกครั้งจะคืนค่าหน้าต่าง
Fanis

8

เจฟฟ์ Axelrod มีทางออกที่ดีที่ใช้AutoHotKey

เขาแมปShift + Windows + Upชุดค่าผสมเพื่อขยายหน้าต่างให้ใหญ่ที่สุดในทุกหน้าจอWindows + Upซึ่งสอดคล้องกับปุ่มลัดของ Windows 7 ซึ่งเพิ่มหน้าต่างที่เลือกไว้ในหน้าจอเดียว

นี่คือรหัสของเขา (ขอบคุณ 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 ไม่ทำงานบนการตั้งค่า Windows 10 ของฉันด้วยสองหน้าจอและไดรเวอร์กราฟิกสองตัวที่แตกต่างกัน ยังคงมีประโยชน์สำหรับผู้อื่น
Martin Zaske

3

หากคุณมีการ์ดวิดีโอ nVidia:

  1. คลิกขวาที่เดสก์ท็อปแล้วคลิก "NVIDIA Control Panel"
  2. ที่ด้านล่างของรายการงานภายใต้เวิร์กสเตชันคือ "ตั้งค่าโมเสก" คลิกมัน
  3. ในบานหน้าต่างด้านขวาให้คลิกช่องทำเครื่องหมายถัดจาก "เปิดใช้งานโมเสก"
  4. ใต้จอแสดงผลให้ใส่เครื่องหมายถูกที่อยู่ติดกับจอภาพที่คุณต้องการรวม
  5. ภายใต้การกำหนดค่าให้เลือกโทโพโลยีที่คุณต้องการ (เคียงข้างกัน, แนวตั้ง .. )
  6. ที่ด้านล่างขวาของหน้าจอคลิก "ใช้"

ตอนนี้เมื่อคุณคลิกปุ่มขยายใหญ่สุดมันจะครอบคลุมทั้งสองหน้าจอ ทาสก์บาร์ของคุณจะครอบคลุมทั้งจอภาพ หากข้อผิดพลาดคุณลองลากไปทางด้านซ้ายของจอภาพเพื่อให้เป็นแนวตั้ง (ใช้งานได้ดีกว่าถ้าคุณทำให้ไอคอนเล็กและใช้ 'ไม่รวมกัน')


2

ฉันใช้โปรแกรมอรรถประโยชน์ฟรีเพื่อทำ VirtualScreenMaximizer:

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

คุณสามารถปรับแต่งทางลัดที่จะใช้สำหรับการขยายใหญ่สุดและการกู้คืนและมันจะขยายหน้าต่างไปที่ทาสก์บาร์เมื่อขยายใหญ่สุด


2

ช้าไปหน่อย แต่ถ้าใช้ Intel integrated graphics คุณสามารถเปิด Intel graphics panel control, เลือกเมนู display และเลือก "display" หลาย ๆ จอจากนั้นเลือก "Collage" ซึ่งจะช่วยให้คุณเลือกจอภาพที่คุณต้องการขยายพร้อมกับตัวเลือกอื่น ๆ .

นี่เป็นภาพหน้าจอของมันที่เปิดใช้งาน:

นี่เป็นภาพหน้าจอของมันเปิดใช้งาน


1

คลิกและลากมิฉะนั้นคุณสามารถใช้กราฟิกการ์ดขั้นสูงเพื่อกำหนดค่าจอภาพให้ทำหน้าที่เป็นหน้าจอขนาดใหญ่


0

ใน Windows 7 ของฉันฉันสามารถลากหน้าต่างเพื่อให้ครอบคลุมทั้งสองหน้าจอ หากคุณคลิกขวาที่เดสก์ท็อปและเลือก "ความละเอียดหน้าจอ" คุณจะต้องเลือก "ขยายการแสดงผลเหล่านี้" ภายใต้ "การแสดงผลหลายจอ" หากคุณปิดหน้าต่างอีกครั้งควรจำขนาดและตำแหน่ง


เป็นเรื่องจริงฉันกำลังมองหาวิธีแก้ปัญหาที่คุณสามารถขยายหน้าต่างทั้งสองให้ใหญ่ที่สุดได้อย่างง่ายดายด้วยจอลัดหรืออะไรทำนองนั้น
Crackerjack

คุณไม่สามารถทำได้โดยเพียงแค่ลากแถบหัวเรื่องหน้าต่างไปที่ด้านบนของหน้าจอ
subanki

@subanki - ไม่นั่นจะทำให้หน้าต่างบนจอภาพปัจจุบันเต็มจอ (คนที่คุณ "
โดน

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 งานนี้
Max Hohenegger

0

ฉันใช้วิธีแก้ปัญหานี้กับ Sizer ( โฮมเพจ ) - ยูทิลิตี้ฟรีแวร์ขนาดเล็กช่วยให้คุณกำหนดขนาดหน้าต่างที่กำหนดไว้ล่วงหน้าโดยการคลิกขวาในพื้นที่ยืดหน้าต่าง

เพียงสร้างชุดโปรไฟล์:

  • ความกว้าง = ผลรวมของความกว้างจอภาพ
  • ความสูง = ความสูงของจอภาพ - ความสูงของแถบงาน (= 40)
  • เลื่อนไปที่ = ซ้ายบน

จากนั้นเพียงคลิกขวาที่ด้านล่างขวาของหน้าต่างและเลือกโปรไฟล์

ป้อนคำอธิบายรูปภาพที่นี่


0

ฉันพบวิธีการทำเช่นนี้โดยไม่มีซอฟต์แวร์หรือรหัสใด ๆ มันไม่อัตโนมัติหรือสมบูรณ์แบบ แต่ง่ายและทำงานได้ดีพอ

  1. ปุ่มลูกศร Windows + ซ้ายหรือขวาเพื่อ snap หน้าต่างครึ่งจอภาพบนขอบด้านไกลของจอภาพทั้งสอง
  2. คว้าขอบหน้าต่างแล้วลากข้ามจอภาพทั้งสองไปทางด้านไกล

0

คลิกขวาบนแถบเครื่องมือของ windows เลือกคืนค่าจากนั้นปรับขนาดบนหน้าจอทั้งสอง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.