Bir pencereyi Windows'ta çift monitörde büyütme?


Yanıtlar:


16

Başkalarının söylediğinin aksine, işte fare altındaki pencereyi büyüten ücretsiz, çalışan bir çözüm.

(Krediler, bu şaşırtıcı 'autoit' işlevlerini yazan adama gider - Ben onları kullanan parçayı yazdım.)

Autoit'i indirin ve kurun (ücretsiz yazılım):

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

Bir .au3 dosyası oluşturun.

Bunu içine yapıştırın:

#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

O zaman çizgiyi değiştir

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

beğeninize değerlerine.

Daha sonra bu dosyaya bir pencere kısayolu oluşturabilir, dosyaya> özellikleri sağ tıklayıp kısayol atayabilirsiniz (örn. CTRL + ALT + UP).

Büyük olasılıkla, işlemi tekrarlamanız ve pencereyi küçük bir boyuta geri yüklemek için ikinci bir dosya oluşturmanız gerekeceğini göreceksiniz.

Bu yardımcı olur umarım


1
Sevdim! NVidia mozaiğini kullanacaktım, ancak iki ayrı ekran kartından nereye bölmek istediğim ve KVM'nin VGA yapmadığından kullanamayacağı monitörleri kullanacaktım. Yalnızca gotchya - .au3 dosyasına giden bir kısayoldan doğrudan çalışmak için klavye kısayolunu alamadım. Ancak au3 komut dosyası adı verilen bir toplu iş komut dosyası kısayolunu çalıştırmak için bir klavye kısayolu elde edebildim.
paquetp

1
Aslında, komut dosyası masaüstünüze yerleştirilmedikçe kısayol yöntemi çalışmaz.
nikos

1
2 monitörden daha fazla olanlar için, WinMove ($ MyWin, "", 0,0,3840,1165) satırındaki 0,0, başlangıç ​​noktasının koordinatlarını gösterir, böylece herhangi bir ekran miktarı değişebilir. bu numaralar buna göre.
ilakast

Win 10'da bu maksimize.au3 için bir kısayol oluşturmak zorundayım ve kısayolun özellikleri bir kısayol atamamı sağlar; toplu işlem gerekli değil.
Martin Zaske

@ nikos bu script benim için çalışıyor ama windows pozisyonunun sözdizimini çözemiyorum; Görünüşe göre 0,0'ım ana monitörümün sol üst köşesinde "yakın" bir yerde. Ayrıca ikinci monitörüm ana monitörümün solunda (ve komut dosyası buna izin veriyor gibi görünüyor, ancak henüz AutoIt sözdizimini okumam). Ancak senaryo, programımı ana monitörümün ("hiçbir şeyin" olmadığı) sağına açıyor. Olumsuz bir değere (-1920,0) takılmayı denedim ama işe yaramadı, negatif sayılar reddetti. Tavsiye lütfen. Cevabınız bir sevinç, birçok program için benim çözümüm olacak, daha fazlasını öğrenmeniz gerekiyor
Martin Zaske

8

İkili Monitör Araçlarını Kullan : Birden fazla ekran kurulumunu yöneten ücretsiz araçlar kümesidir .

Gelen Takas ekranı tüm ekranları işgal etmek büyütebilirsiniz böylece aracı size "Supersize aktif pencere" için bir kısayol tuşu atayabilirsiniz.


2
Tam olarak aradığım şeyi yapan Ultramon'dan gelen aklı başında varsayılanlar (tümü devre dışı) olan mükemmel bir program. Bir ipucu: "Etkin pencerenin yerini değiştir" kısayol tuşu bir geçiş işlevi görür. Tekrar vurmak pencereyi geri yükler.
Fanis

8

Jeff Axelrod, AutoHotKey kullanan harika bir çözüme sahiptir .

Shift + Windows + UpWindows 7'nin Windows + Upkısayol tuşunu tamamlayan ve seçilen pencereyi tek bir monitörde büyüten tüm ekranlarda bir pencereyi büyütmek için kombinasyonu eşler .

İşte onun kodu (teşekkürler 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 kurulumumda iki ekran ve iki farklı grafik sürücüsü ile çalışmıyor. Yine de diğerleri için potansiyel olarak faydalıdır.
Martin Zaske

3

Bir nVidia ekran kartınız varsa:

  1. Masaüstünde sağ tıklayın ve "NVIDIA Kontrol Paneli" üzerine tıklayın
  2. Görev listesinin altında, İş İstasyonu altında, "Mozaik Kurma" bulunur. Tıkla.
  3. Sağ bölmede, "Mozaiği Etkinleştir" in yanındaki onay kutusunu tıklayın.
  4. Ekranlar'ın altında, birleştirmek istediğiniz ekranların yanlarına onay işaretleri koyun.
  5. Yapılandırma altında, istediğiniz topolojiyi seçin (yan yana, dikey ..)
  6. Ekranın sağ alt kısmında "Uygula" yı tıklayın

Şimdi, Büyüt düğmesine tıkladığınızda, her iki monitörü de kapsayacak. Görev çubuğunuz ayrıca her iki monitörü de kapsayacaktır. Bu sizi rahatsız ediyorsa, monitörün soluna sürükleyerek dikey hale gelmesini sağlayın (simgeleri küçük yaparsanız ve 'asla birleştirme'yi kullanmazsanız daha iyi çalışır).



2

Biraz geç ama Intel tümleşik grafikleri kullanıyorsanız, Intel grafik kontrol panelini açabilir, ekran menüsünü seçebilir ve oradan birden fazla ekran seçip "Kolaj" ı seçmeniz, hangi monitörleri genişletmek istediğinizi seçmenize olanak sağlar. .

İşte etkin bir ekran görüntüsü:

Heres bir ekran görüntüsü etkin


1

Tıklatıp sürükleyin; aksi takdirde, monitörleri tek bir büyük ekran olarak çalışacak şekilde yapılandırmak için gelişmiş grafik kartınızı kullanabilirsiniz.


0

Windows 7'mde her iki ekranı da kapsayacak şekilde pencereyi sürükleyebiliyorum. Masaüstünüze sağ tıklayıp "ekran çözünürlüğü" nü seçtiyseniz, "birden fazla ekran" altında "bu ekranları genişlet" i seçmelisiniz. Pencereyi tekrar kapatırsanız, boyut ve konumu hatırlamanız gerekir.


Bu doğru, pencereyi kısayol veya benzeri bir şeyle her iki monitöre kolayca en üst düzeye çıkarabileceğiniz bir çözüm arıyorum.
Crackerjack

Bunu yapmak mümkün değil sadece pencere başlık çubuğunu ekranın üst kısmına sürükleyerek
subanki

@subanki - hayır, bu sadece şu anki
ekrandaki pencereyi büyütecek

0

Eğer kimse bunu autoit kullanarak yapmaya çalışıyorsa, şunu yaptım:

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 ve WindowsConstants.au3'ü dahil ettikten sonra bu çalışır.
Max Hohenegger

0

Sizer ile bu geçici çözümü kullanıyorum ( ana sayfa ) - küçük ücretsiz yazılımı, önceden tanımlanmış pencerelerin boyutunu Pencere genişletme alanında sağ tıklatarak ayarlamanızı sağlar.

Sadece profil grubu oluştur:

  • Genişlik = monitör genişliklerinin toplamı
  • Yükseklik = Monitör yüksekliği - görev çubuğu yüksekliği (= 40)
  • Taşı = Sol üst

Sonra sadece pencerenin sağ alt ucuna sağ tıklayın ve profili seçin.

görüntü tanımını buraya girin


0

Herhangi bir yazılım veya kod olmadan bunu yapmanın bir yolunu buldum. Otomatik veya mükemmel değil, kolay ve yeterince iyi çalışıyor.

  1. Pencereyi iki monitörün uzak kenarında bir monitörün yarısına tutturmak için Windows + sol veya sağ ok tuşu
  2. Pencerenin kenarını tutup her iki monitörden uzak tarafa sürükleyin

0

Pencerelerin araç çubuğuna sağ tıklayın, Geri Yükle'yi seçin ve ardından her iki ekranda da yeniden boyutlandırın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.