70 votes

Mémorisation de l'emplacement des fenêtres lors de l'arrimage et du désarrimage.

Je trouve cela plus que frustrant.

J'ai deux écrans supplémentaires sur mon ordinateur portable au travail. Je prends mon ordinateur portable et je rentre chez moi, sans qu'aucun écran supplémentaire ne soit connecté. Je reviens, j'installe l'ordinateur portable et je dois à nouveau réorganiser les fenêtres.

Existe-t-il un moyen de faire en sorte que Windows (ou un utilitaire) garde la trace de la configuration globale de l'écran (#, taille, résolution), et se souvienne de l'endroit où les fenêtres ont été placées, de sorte que lorsque la configuration de l'écran correspond à nouveau, il replace les applications là où elles étaient ?

31voto

Manuel Points 421

CLAUSE DE NON-RESPONSABILITÉ : Je suis le créateur de cet outil.

J'ai créé un petit outil pour réorganiser les fenêtres en cliquant sur une icône de la barre d'état. Vous pouvez le compiler à partir des sources ou demander à avoir un binaire (portable) via le lien des problèmes.

Il est hébergé sur Github : https://github.com/manutalcual/winredock

Si vous avez des suggestions, je serais heureux de les entendre.

MODIFIER : 2018/11/22

Il est entièrement automatisé maintenant.

12voto

Wild_A Points 251

J'utilise actuellement DisplayFusion Pro pour la localisation des fenêtres (et pas seulement). Je ne sais pas comment cela fonctionne lorsque vous déconnectez et connectez votre moniteur - j'en ai toujours trois.

Je pense que vous devez fermer et rouvrir vos applications pour les réarranger.

Edit : Cette fonction est disponible uniquement dans la version Pro. - Informations provenant des commentaires.

screenshot of settings

page d'accueil de DisplayFusion

4voto

Phillip Ngan Points 1290

Voici une application console pour enregistrer et restaurer les emplacements et les états des fenêtres sur un bureau Windows. Pour sauvegarder les emplacements des fenêtres, exécutez :

  winLayout save

pour restaurer l'exécution des positions de Windows :

  winLayout restore

Placez ces commandes dans un raccourci sur le bureau et épinglez-les à la barre des tâches pour plus de commodité.

Avertissement : J'ai écrit cet utilitaire parce que les autres outils sur cette page ne fonctionnaient pas pour moi.

Caveat : Il fonctionne pour les applications, mais pas l'explorateur Windows (pour le moment)

2voto

Mr. Mascaro Points 408

Le problème est que les applications Windows ne voient pas vraiment les moniteurs multiples. Le gestionnaire de fenêtres garde la trace de la position des fenêtres en référence au coin supérieur gauche de votre écran principal. Je ne connais pas d'application commerciale qui le fasse, mais vous pourriez écrire une application en C# ou même en VB.NET qui pourrait écrire ces valeurs dans un fichier et les restaurer plus tard, mais il n'y aurait pas de "déclencheur" pour cela. Vous devriez indiquer au programme quand stocker et récupérer les données manuellement.

2voto

Max Points 21

Essayez ce script, écrit pour Excel. Il stocke les positions des fenêtres dans une feuille et les restaure à partir de là. Vous pouvez avoir des boutons sur l'une des feuilles pour exécuter les macros de stockage et de restauration, ou des raccourcis vers des script VBS qui exécutent les macros Excel, peut-être avec des touches de raccourci attribuées. De cette façon, le classeur Excel peut rester réduit. Bien sûr, quelque chose de similaire peut être écrit dans un programme compilé.

    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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X