Merken Sie sich die Fensterpositionen, wenn Sie angedockt und abgedockt sind


45

Ich finde das überaus frustrierend.

Ich habe zwei zusätzliche Bildschirme auf meinem Laptop bei der Arbeit. Ich nehme meinen Laptop und gehe nach Hause, ohne dass zusätzliche Bildschirme angeschlossen sind. Ich komme zurück, lege den Laptop an und die Fenster müssen neu angeordnet werden.

Gibt es eine Möglichkeit, Windows (oder ein Hilfsprogramm) dazu zu bringen, die gesamte Bildschirmkonfiguration (#, Größe, Auflösung) im Auge zu behalten und sich zu merken, wo Fenster platziert wurden? ?


1
Ich habe das gleiche Problem, aber meine Beschwerde ist, wenn ich den Laptop später öffne und das Anwendungsfenster immer noch nicht auf dem Bildschirm angezeigt wird (verwenden Sie am Ende die Pfeiltasten, um es wieder auf dem Bildschirm anzuzeigen). Ich glaube nicht, dass es eine integrierte Lösung dafür gibt.
Brad Patton

Antworten:


8

HAFTUNGSAUSSCHLUSS: Ich bin der Schöpfer dieses Tools.

Ich habe ein kleines Tool erstellt, um Fenster auf einem Traybar-Symbol neu anzuordnen. Sie können es aus dem Quellcode kompilieren oder über den Issues-Link eine (portable) Binärdatei anfordern.

Es wird von Github gehostet: https://github.com/manutalcual/winredock

Ich würde mich freuen, von Ihnen zu hören, wenn Sie Vorschläge haben.

EDIT: 2018/11/22

Es ist jetzt voll automatisiert.


Das sieht gut aus, aber ich suche etwas Automatischeres.
Sellorio

3
Ich habe die Automatisierungsfunktion aufgrund von Benutzeranfragen hinzugefügt.
Manuel

Beachten Sie, dass die Version in Master zumindest unter Windows 10 Probleme mit virtuellen Desktops hat. Verwenden Sie den Zweig namens I0010-Wiederherstellen-Positionen-funktioniert-nicht
HansHarhoff

Ich habe Zweig I0010-Wiederherstellen-Positionen-funktioniert-nicht-in Meister zusammengeführt, also arbeiten wir jetzt vielleicht besser
Manuel

1
Das ist fantastisch! Es funktioniert super gut beim ersten Versuch! Danke, dass du das gemacht hast!
BT

6

Ich verwende derzeit DisplayFusion Pro für die Fensterposition (nicht nur). Ich weiß nicht, wie das funktioniert, wenn Sie Ihren Monitor trennen und anschließen - ich habe immer drei.

Ich denke, dass Sie Ihre Apps schließen und erneut öffnen müssen, um neu angeordnet zu werden.

Bearbeiten: Diese Funktion ist nur in der Pro-Version verfügbar. - Informationen aus Kommentaren.

Screenshot der Einstellungen

Homepage von DisplayFusion


2
Zu Ihrer Information, die Fensterlokalisierungsfunktion wird angezeigt, um meine Anfrage zu lösen. Es ist zu beachten, dass dies eine PRO-Version ist, die eine gekaufte Lizenz erfordert.
MADCookie

Weitere Informationen finden Sie im Feature-Vergleich für Free vs. Pro unter "Alle Fensterpositionen speichern oder wiederherstellen" . Leider ist die billigste Lösung 25 $.
Chiramisu

1
Funktioniert dies, wenn Sie mehrere native virtuelle Desktops in Windows 10 haben?
K Robinson

2

Das Problem ist, dass Windows-Anwendungen nicht wirklich mehrere Monitore sehen. Der Fenstermanager verfolgt die Fensterpositionen in Bezug auf die linke obere Ecke oder Ihre Hauptanzeige. Mir sind keine kommerziellen Anwendungen bekannt, aber Sie könnten eine Anwendung in C # oder sogar VB.NET schreiben, die diese Werte in eine Datei schreibt und sie später wiederherstellt, aber es würde keinen "Auslöser" dafür geben. Sie müssen dem Programm mitteilen, wann die Daten manuell gespeichert und abgerufen werden sollen.


2

Probieren Sie dieses für Excel geschriebene Skript aus. Es speichert die Fensterpositionen in einem Blatt und stellt sie von dort wieder her. Auf einem der Blätter befinden sich möglicherweise Schaltflächen zum Ausführen des Speichers und zum Wiederherstellen von Makros oder Verknüpfungen zu VBS-Skripts, mit denen die Excel-Makros ausgeführt werden, möglicherweise mit zugewiesenen Tastenkombinationen. Auf diese Weise kann die Excel-Arbeitsmappe minimiert werden. Natürlich kann etwas Ähnliches in einem kompilierten Programm geschrieben werden.

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

Erklären Sie, was dies tun soll, und bereinigen und formatieren Sie den gesamten Codeblock ordnungsgemäß, da er schwer zu lesen ist.
Pimp Juice IT

Und können Sie erklären, wie Sie VBS-Skripte haben, mit denen die Excel-Makros ausgeführt werden? Wie kann so etwas in ein kompiliertes Programm geschrieben werden?
G-Man sagt, dass Monica

Dies ist ein interessanter Ansatz. Hast du es selbst benutzt? Ich bin sicher, dass viele Leute davon profitieren würden, wenn Sie eine End-to-End-Arbeitsprobe erstellen könnten
Miserable Variable

1

Dieser sah vielversprechend aus: https://github.com/adamsmith/WindowsLayoutSnapshot

Leider haben sich in meinem Fall beim Speichern des Layouts auf 1920 x 1200-Monitoren (3 x 24 "), beim Wechseln zu einem Laptop (1920 x 1080) und beim Versuch, das Layout wiederherzustellen, die Fenster nicht wirklich auf andere Monitore verlagert Anderes Setup wird funktionieren.


Sieht vielversprechend aus , aber das wird nicht auf meinem PC läuft (Windows 8.1)
Dunc

Leider eingestellt, und es verliert die gesamte Konfiguration, wenn das Programm geschlossen oder der PC neu gestartet wird, was der Autor nicht vorhat, zu beheben.
Laurent

Die neue Version ist hier verfügbar - github.com/nefarius/WindowsLayoutSnapshot . Funktioniert perfekt auf win10!
Max Lazar,

1

Hier ist eine Konsolenanwendung zum Speichern und Wiederherstellen von Fensterpositionen und -zuständen auf einem Windows-Desktop. So speichern Sie Windows-Speicherorte:

  winLayout save

So stellen Sie Windows-Positionen wieder her:

  winLayout restore

Fügen Sie diese Befehle in eine Desktop-Verknüpfung ein und fügen Sie sie der Einfachheit halber in die Taskleiste ein.

Haftungsausschluss: Ich habe dieses Dienstprogramm geschrieben, weil die anderen Tools auf dieser Seite für mich nicht funktionierten.

Vorsichtsmaßnahme: Es funktioniert für Anwendungen, aber nicht für Explorer-Fenster (derzeit)


0

Ich habe Stardock's Fences in einem ähnlichen Szenario verwendet:

Fences hilft Ihnen dabei, Ihren PC zu organisieren, indem Sie Ihre Verknüpfungen und Symbole automatisch in skalierbaren, schattierten Bereichen auf Ihrem Desktop platzieren, die als Zäune bezeichnet werden. Die zahlreichen Anpassungsfunktionen machen Fences zur weltweit beliebtesten Windows-Desktop-Verbesserung.


8
Das ordnet Ikonen an. Keine Fenster. Mein Problem ist, dass ich 8 Programme auf drei Bildschirmen geöffnet habe. Wenn ich den Laptop schließe und ihn mit den drei Bildschirmen wieder öffne, sind alle meine Anwendungsfenster auf einem Bildschirm geöffnet und nicht so angeordnet, wie ich sie hatte.
CaffGeek

0

Viele Windows-Benutzer hatten dieses Problem, eine Anwendung wurde entwickelt und in den Windows 7-Foren geteilt, wie hier gezeigt:

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

Auf der Website finden Sie Anweisungen, die Ihnen helfen und Ihr Problem beheben sollten.


Das Forum sagt : „Dies ist eine App ist Windows 7 Explorer Ordnerfenster erinnern sich an ihre Größe und Position zu machen“ und „Es ist nicht verwalten Fenstergröße / Positionen der regelmäßigen Anwendungen, wenn Sie wollen , dass andere Anwendungen wie Window Manager do it“. Was ist mit Window Manager gemeint ? Ist das der Microsoft Windows Manager-Dienst oder das Produkt von DeskSoft Link
MADCookie

Ja, es ist das Produkt von DeskSoft
DarkEvE
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.