Yerleştirildiğinde ve çıkarıldığında pencere konumlarını hatırla


45

Bunu sinir bozucu ötesinde buluyorum.

Dizüstü bilgisayarımda işte iki ekstra ekran var. Dizüstü bilgisayarımı alıp eve dönüyorum, fazladan ekran bağlı değil. Geri döndüm, dizüstü bilgisayarı yerleştirdim ve camların yeniden düzenlenmesi gerekiyor.

Genel ekran yapılandırmasını (#, boyut, çözünürlük) takip etmek için pencereleri (veya bir yardımcı programı) almanın ve pencerelerin nereye yerleştirildiğini hatırlamanın bir yolu var mı? ?


1
Aynı sorunu yaşıyorum ama şikayetimi daha sonra dizüstü bilgisayarı açtığımda ve uygulama penceresi hala ekrandan çıktığında (ekrana geri getirmek için ok tuşlarını kullanarak). Bunun için yerleşik bir çözüm olduğunu sanmıyorum.
Brad Patton

Yanıtlar:


8

YASAL UYARI: Ben bu aracın yaratıcısı benim.

Bir tepsi çubuğu simgesini tıklatarak pencereleri yeniden düzenlemek için küçük bir araç yarattım. Kaynağından derleyebilir veya issues link üzerinden (portatif) bir ikili dosya olmasını isteyebilirsiniz.

Github'da barındırılmaktadır: https://github.com/manutalcual/winredock

Önerileriniz varsa, sizden haber almaktan memnuniyet duyarım.

EDIT: 2018/11/22

Şimdi tamamen otomatik.


Bu güzel görünüyor ama daha otomatik bir şey arıyorum.
Sellorio

3
Kullanıcı istekleri nedeniyle otomasyon özelliğini ekledim.
Manuel

Master’daki sürümün en az Windows 10’da sanal masaüstlerinde sorun olduğunu unutmayın. I0010-restore-position-doesnt-work
HansHarhoff

Şube I0010-geri yükleme-konumlar-çalışmaz-işini ustalıkla birleştirdim, şimdi daha iyi çalışıyor olabiliriz
Manuel

1
Bu fantastik! İlk denemede süper iyi çalışıyor! Bunu yaptığınız için teşekkür ederim!
BT,

6

Şu anda, pencere konumu için DisplayFusion Pro kullanıyorum (yalnızca değil). Monitörünüzün bağlantısını kesip bağladığınızda bunun nasıl çalıştığını bilmiyorum - her zaman üçüm var.

Bence, yeniden düzenlenmeleri için uygulamalarınızı kapatıp yeniden açmanız gerekir.

Düzenleme: Bu özellik yalnızca Pro sürümünde kullanılabilir. - Yorumlardan bilgiler.

ayarların ekran görüntüsü

DisplayFusion'ın ana sayfası


2
Bilginize, isteğimi çözmek için Pencere Konumu özelliği görünür. Bunun, satın alınan bir lisans gerektiren bir PRO sürüm olduğunu başkalarına not etmek gerekir.
MADCookie

Pro ile Ücretsiz Özellik Karşılaştırmasında "Tüm pencere konumlarını Kaydet veya Geri Yükle" özelliğine bakın . Ne yazık ki en ucuz çözüm 25 dolar.
Chiramisu

1
Windows 10'da birden çok yerel sanal masaüstünüz olduğunda bu çalışıyor mu?
K Robinson

2

Sorun, Windows uygulamalarının gerçekten birden fazla monitör görmemesidir. Pencere yöneticisi, sol üst köşeye veya ana ekranınıza göre pencere konumlarını izler. Bunu yapan ticari uygulamaların farkında değilim, ancak bu değerleri bir dosyaya yazıp daha sonra geri yükleyebilecek C # veya hatta VB.NET'te bir uygulama yazabilirsiniz, ancak daha sonra geri yükleyebilirsiniz, ancak bunun için "tetikleyici" olmaz. Programın ne zaman verileri manuel olarak ne zaman kaydedeceğini ve alacağını söylemelisiniz.


2

Excel için yazılmış bu betiği deneyin. Pencere konumlarını bir sayfada saklar ve oradan geri yükler. Depolamak ve makroları geri yüklemek için sayfalardan birinde düğmelere veya Excel makrolarını çalıştıran VBS komut dosyalarına kısayollar, belki de kısayol tuşları atanmış olabilir. Bu şekilde Excel çalışma kitabı simge durumuna küçültülebilir. Elbette benzer bir şey derlenmiş bir programda yazılabilir.

Public Declare PtrSafe Function GetWindowPlacement Lib "user32" (ByVal hwnd As LongPtr, lpwndpl As WINDOWPLACEMENT) As Long
Public Declare PtrSafe Function SetWindowPlacement Lib "user32" (ByVal hwnd As LongPtr, lpwndpl As WINDOWPLACEMENT) As Long

Public Declare PtrSafe Function GetWindow Lib "user32.dll" (ByVal hwnd As Long, ByVal wCmd As Long) As Long

Public Declare PtrSafe Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Public Declare PtrSafe Function IsWindowVisible Lib "user32.dll" (ByVal hwnd As Long) As Boolean
Public Declare PtrSafe Function GetParent Lib "user32.dll" (ByVal hwnd As Long) As Long
Public Declare PtrSafe Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As LongPtr, ByVal lpString As String, ByVal cch As LongPtr) As Long

Public Type POINTAPI
X As Long
Y As Long
End Type

Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Public Type WINDOWPLACEMENT
Length As Long
    flags As Long
    showCmd As Long
    MinPosition As POINTAPI
    MaxPosition As POINTAPI
    rcNormalPosition As RECT
End Type

Global Const gw_hwndnext = 2
Global Const fwp_startswith = 0
Global Const fwp_contains = 1
Global title As String
Global Visible As Boolean
Global RowCount
Public prog As String


Public Sub StoreActiveWindows()
    Dim hwndapp As Long
    Dim hwndmax As Long
    Dim nret As Long
    Dim WinFrm As WINDOWPLACEMENT
    Dim RectFrm As RECT

    PleaseWait.Show vbModeless
    DoEvents

    RowCount = 1
    hwndmax = findwindow(0&, 0&)
    Do Until hwndmax = 0
    hwndapp = findthiswindow(hwndmax)
    If hwndapp Then
        If title <> "CURRENT WINDOWS OPEN" And Visible Then
            rtn = GetWindowPlacement(hwndapp, WinFrm)

            RectFrm = WinFrm.rcNormalPosition

            FrmTop = RectFrm.Top
            FrmRight = RectFrm.Right
            FrmLeft = RectFrm.Left
            FrmBottom = RectFrm.Bottom
            Workbooks(Filename).Activate
            Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 1) = title
            Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 2) = hwndapp
            Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 3) = FrmTop
            Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 4) = FrmRight
            Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 5) = FrmLeft
            Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 6) = FrmBottom
            Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 7) = WinFrm.MaxPosition.X
            Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 8) = WinFrm.MaxPosition.Y
            Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 9) = WinFrm.MinPosition.X
            Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 10) = WinFrm.MinPosition.Y
            Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 11) = WinFrm.showCmd
            Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 12) = WinFrm.flags
            Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 13) = WinFrm.Length
            RowCount = RowCount + 1
        End If
    End If
    hwndmax = GetWindow(hwndmax, gw_hwndnext)
    Loop
            Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 1) = ""
            Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 2) = ""
            Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 3) = ""
            Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 4) = ""
            Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 5) = ""
            Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 6) = ""
            Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 7) = ""
            Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 8) = ""
            Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 9) = ""
            Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 10) = ""
            Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 11) = ""
            Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 12) = ""
            Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 13) = ""

    Unload PleaseWait

End Sub

Public Function findthiswindow(ByVal hwndtopmost As Long) As Long
    Dim hwndtmp As Long
    Dim nret As Long
    Dim titletmp As String

    'Get the first window
    hwndtmp = hwndtopmost

    If GetParent(hwndtmp) = 0 Then
        'Set its visibility
        If IsWindowVisible(hwndtmp) Then
            Visible = True
        Else
            Visible = False
        End If
        'Get its title
        titletmp = Space(256)
        nret = GetWindowText(hwndtmp, titletmp, Len(titletmp))
        If nret Then
            findthiswindow = hwndtmp
        End If
    End If

    If Visible Then
        title = titletmp & " - Visible"
        Else
        title = titletmp & " - Invisible"
        End If
        title = titletmp
        If titletmp <> "" Then

        'If title = "SETTINGS" Then
            HasNoOWner = Not (GetWindow(hwndtmp, 4))
            n = 1
        'End If

        If (UCase(Left(title, 15)) = "PROGRAM MANAGER" Or UCase(title) = "SETTINGS") Then
            n = 1
            title = ""
            findthiswindow = 0
        End If
    End If
End Function

Sub RestoreWindowsLocations()
    Dim WinFrm As WINDOWPLACEMENT
    Dim RectFrm As RECT

    PleaseWait.Show vbModeless
    DoEvents

    Workbooks(Filename).Activate

    RowCount = 1
    Do Until Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 1) = ""
        hwndapp = Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 2)
'       rtn = GetWindowPlacement(hwndapp, WinFrm)
        WinFrm.rcNormalPosition.Top = CLng(Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 3))
        WinFrm.rcNormalPosition.Right = CLng(Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 4))
        WinFrm.rcNormalPosition.Left = CLng(Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 5))
        WinFrm.rcNormalPosition.Bottom = CLng(Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 6))
        WinFrm.MaxPosition.X = CLng(Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 7))
        WinFrm.MaxPosition.Y = CLng(Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 8))
        WinFrm.MinPosition.X = CLng(Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 9))
        WinFrm.MinPosition.Y = CLng(Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 10))
        WinFrm.showCmd = CLng(Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 11))
        WinFrm.flags = CLng(Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 12))
        WinFrm.Length = CLng(Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 13))

        rtn = SetWindowPlacement(hwndapp, WinFrm)
        rtn = SetWindowPlacement(hwndapp, WinFrm)

        RowCount = RowCount + 1

    Loop
    Unload PleaseWait
End Sub

Lütfen bunun ne yapması gerektiğini açıklayın ve kod bloğunun tamamını olduğu gibi okumak zor olduğu kadar temizleyin ve biçimlendirin.
Pezevenk Suyu BT

Ve Excel makrolarını çalıştıran VBS komut dosyalarının nasıl olacağını açıklayabilir misiniz? Benzer bir şey derlenmiş bir programda nasıl yazılabilir?
G-Man 'Monica'yı Yeniden Kazandır'

Bu ilginç bir yaklaşım. Kendin kullandın mı? Uçtan uca bir çalışma örneği oluşturabilirseniz birçok insanın fayda sağlayacağından eminim
Sefil Değişken

1

Bu umut verici görünüyordu: https://github.com/adamsmith/WindowsLayoutSnapshot

Ne yazık ki benim durumumda, düzeni 3x24 inç 1920x1200 monitörlere kaydederken, bir dizüstü bilgisayar 1920x1080'e geçtikten sonra üçe geri dönüp düzeni yeniden kurmaya çalışırken, pencereler gerçekten diğer monitörlere geçmedi. diğer kurulum işe yarayacak.


Umut verici görünüyor, ama bu benim PC'de çalışmayacak (Windows 8.1)
Dunc

Ne yazık ki üretimden vazgeçildi ve program kapatıldığında veya bilgisayar yeniden başlatıldığında, yazarın düzeltmeyi planlamadığı tüm yapılandırmaları kaybediyor.
laurent

Burada bulunan yeni sürüm - github.com/nefarius/WindowsLayoutSnapshot . Win10'da mükemmel çalışıyor!
Max Lazar

1

Pencere konumlarını kaydetmek ve geri yüklemek ve bir Windows Masaüstünde durumları göstermek için bir konsol uygulaması . Windows konumlarını çalıştırmak kaydetmek için:

  winLayout save

Windows pozisyonlarını çalıştırmak için:

  winLayout restore

Bu komutları bir Masaüstü kısayoluna yerleştirin ve kolaylık sağlamak için Görev Çubuğuna sabitleyin.

Yasal Uyarı: Bu yardımcı programı yazdım çünkü bu sayfadaki diğer araçlar benim için işe yaramadı.

Uyarı: Bu uygulamalar için çalışır, ancak şu anda gezgin pencerelerinde değil


0

Ben kullandım Stardock Çit benzer senaryosunda önce:

Çitler, kısayollarınızı ve simgelerinizi masaüstünüzde çitler adı verilen yeniden boyutlandırılabilir gölgeli alanlara otomatik olarak yerleştirerek bilgisayarınızı düzenlemenize yardımcı olur. Pek çok özelleştirme özelliği, Fences'i dünyanın en popüler Windows masaüstü donanımını yapan şeydir.


8
Bu simgeleri düzenler. Pencereler değil. Benim sorunum üç ekranda 8 program açmam. Dizüstü bilgisayarı kapattığımda ve üç ekranla yeniden açtığımda, tüm uygulama pencerelerim tek bir ekranda açık, bunları nasıl düzenleyeceğimi ayarlamıyordum.
CaffGeek

0

Windows kullanıcılarının birçoğunda bu sorun vardı, bir uygulama geliştirildi ve Windows 7 forumlarında burada gösterildiği gibi paylaşıldı:

http://www.sevenforums.com/free-developer-programs-projects/40916-shellfolderfix-manage-folder-window-positions-size.html#post396744 

Sitede yardım eden ve sorununuzu çözmesi gereken talimatlar var.


Forum, "Bu, Windows 7 explorer klasörü pencerelerinin boyutlarını ve konumlarını hatırlamasını sağlayan bir uygulama" ve "İsterseniz, Windows Manager gibi diğer uygulamaların yapmasını istiyorsanız, normal uygulamaların pencere boyutunu / konumlarını DEĞİLDİR " diyor. Pencere Yöneticisi ne anlama geliyor ? Microsoft Windows Manager hizmeti mi, yoksa DeskSoft link
MADCookie 7:14

evet bu DeskSoft ürünüdür
DarkEvE
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.