web-dev-qa-db-fra.com

Comment puis-je forcer Windows 10 à véritablement ouvrir des programmes dans le même endroit avec exactement la même taille?

J'ai récemment mis à niveau vers Windows 10 sur mon PC à domicile. Dans Windows 7, j'ai eu quelques programmes de démarrage que j'ai utilisés souvent pour ouvrir sur un deuxième moniteur au démarrage. Ces programmes ouvriraient toujours au même endroit avec la même taille. Je suppose que c'est une caractéristique des fenêtres et/ou du programme lui-même.

Dans Windows 10, j'ai remarqué que certains programmes ne présentent pas ce comportement. Ils sont spécifiquement ouverts au même endroit, mais 10-20px plus courte dans la direction horizontale. Par exemple, lors du démarrage (ou même pendant l'utilisation générale), je vais optimiser horizontalement Windows Explorer.exe. Lorsque l'explorateur est ensuite ouvert à nouveau, 10-20px de largeur sont extraits de la gauche et du côté droit de la fenêtre.

enter image description here

Dans l'image ci-dessus, la partie supérieure indique l'explorateur ouvert et horizontalement maximisée. Le bas indique que l'explorateur a ouvert à nouveau après la fermeture et son emplacement et sa taille par défaut définis par (je suppose) Windows. (Le bleu clair est l'arrière-plan d'image, le noir est "Aucun homme de l'homme" dans l'espace de bureau, le gris foncé est mon fond de bureau, les lignes rouges montrent l'emplacement général de la largeur manquante de la fenêtre).


Comment puis-je forcer Windows 10 à Vraiment et toujours ouvrir des programmes dans le même endroit avec exactement la même taille?

Remarque, certains programmes n'ont pas ce problème. Plus précisément Firefox, il s'ouvrira toujours dans le même endroit avec exactement la même taille. Bien que je suis totalement certaine, cela est une caractéristique de Firefox. Donné Explorer.exe est Windows ', puis je sais que ce problème est également sur la fin de Windows.

7
KDecker

Un outil gratuit existe qui utilise la langue de script de Autohotkey .

Un utilisateur nommé GALLAXHAR a créé un script dans la poste restaurer automatiquement la dernière position de la fenêtre pour chaque processus qui agit en tant que gestionnaire de fenêtres automatique qui enregistre les positions de la fenêtre sans entrée ou configuration de l'utilisateur. Cela fonctionne en obtenant les informations actuelles de la fenêtre Active (ID et Nom de processName). Il enregistre la dernière taille de la fenêtre/pos sur un fichier ini et se lit à partir de ce fichier lorsque de nouveaux identifiants de fenêtre deviennent actifs. Il ne fera que la taille automatique des fenêtres après son exécution, elle n'attutilisera que les nouveaux identifiants, et cela ne fera que la fois pour cet identifiant.

Après avoir installé Autohotkey, placez le script dans un .ahk fichier. Test en double-cliquez sur le lancement. Il aura une icône verte "h" dans la barre de volets, que vous pouvez cliquer avec le bouton droit de la souris pour quitter. Une fois prouvé comme fonctionne correctement, vous pouvez le placer dans votre dossier de démarrage.

J'ai testé le script et il semble fonctionner dans votre scénario.

Le script est reproduit ici:

; Automatically Restore Previous Window Size/Pos

; To make this script run when windows starts, make sure RegistryAdd.ahk is in the same directory as this script, run this script, and it will be added to the registry. Then delete RegistryAdd.ahk
#Include *i RegistryAdd.ahk

; To easily remove the previously added registry entry, make sure RegistryRemove.ahk is in the same directory as this script, run this script, and it will be removed from the registry. Then delete RegistryRemove.ahk
#Include *i RegistryRemove.ahk

#SingleInstance Force
#Persistent
#NoEnv
;#NoTrayIcon
SetWinDelay, 50
Process, Priority, , Normal

MatchList := ""

; Build the MatchList
WinGet, id, list,,, Program Manager
Loop, %id%
{
    this_id := id%A_Index%
    if (MatchList = "")
    MatchList := this_id
    else
    MatchList := MatchList . "," . this_id 
}

; ExclusionList
ExclusionList = ShellExperienceHost.exe,SearchUI.exe

; The main program loop, which manages window positions/sizes and saves their last known configuration to an ini file in the script directory.
Loop,
{
    Sleep, 350
    WinGet, active_id, ID, A
    if active_id not in %MatchList% ; Then this is a new window ID! So, check if it has a configuration saved.
    {
        MatchList := MatchList . "," . active_id ; This window ID is not new anymore!
        WinGet, active_ProcessName, ProcessName, A
        WinGetClass, active_Class, A
        IniRead, savedSizePos, %A_ScriptDir%\WindowSizePosLog.ini, Process Names, %active_ProcessName%
        if (savedSizePos != "ERROR" AND active_Class != "MultitaskingViewFrame" AND active_class != "Shell_TrayWnd") ; Then a saved configuration exists, size/move the window!
        {
            StringSplit OutputArray, savedSizePos,`,
            if (active_ProcessName = "Explorer.exe" AND active_Class != "CabinetWClass")
            {

            }
            else
            {
                WinMove, A,, OutputArray1, OutputArray2, OutputArray3, OutputArray4
            }
        }
        else ; No saved configuration exists, save the current window size/pos as a configuration instead!
        {
            WinGetPos X, Y, Width, Height, A
            WinGet, active_ProcessName, ProcessName, A
            WinGetClass, active_Class, A
            If (X != "" AND Y != "" AND Width != "" AND Height != "" AND Width > 0 AND Height > 0 AND active_Class != "MultitaskingViewFrame" AND active_class != "Shell_TrayWnd")
            {
                if (active_ProcessName = "Explorer.exe" AND active_Class != "CabinetWClass")
                {

                }
                else if active_ProcessName not in %ExclusionList%
                {
                    IniWrite %X%`,%Y%`,%Width%`,%Height%, %A_ScriptDir%\WindowSizePosLog.ini, Process Names, %active_ProcessName%
                }
            }
        }
    }
    else ; Save/overwrite the active window size and position to a file with a link to the processname, for later use.
    {
        WinGetPos X, Y, Width, Height, A
        WinGet, active_ProcessName, ProcessName, A
        WinGetClass, active_Class, A
        If (X != "" AND Y != "" AND Width != "" AND Height != "" AND Width > 0 AND Height > 0 AND active_Class != "MultitaskingViewFrame" AND active_class != "Shell_TrayWnd")
        {
            if (active_ProcessName = "Explorer.exe" AND active_Class != "CabinetWClass")
            {

            }
            else if active_ProcessName not in %ExclusionList%
            {
                IniWrite %X%`,%Y%`,%Width%`,%Height%, %A_ScriptDir%\WindowSizePosLog.ini, Process Names, %active_ProcessName%
            }
        }
    }
}
Return

Un outil commercial qui se souvient également et restaure la position et la taille des programmes et Windows est Desksoft WindowManager (10 $, évaluations).

Cet outil se souviendra de postes et de tailles sur les redémarrages.

4
harrymc

Ce problème est si vieux et si commun que de nombreux développeurs différents ont publié des projets visant à couvrir la carence dans Windows OS.

Beaucoup sont gratuits: http://www.stefandidak.com/windows-layout-manager/

ou open source: https://github.com/lapo-luchini/windowslayoutsnapshot/tree/v1.3.0.

Certaines personnes ont remarqué que si vous déplacez le menu Démarrer sur le dessus, au lieu du bas, que Windows se comporte différemment.

Vous pouvez également vous plaindre à Microsoft. C'est quelque chose qui devrait simplement fonctionner comme dans d'autres systèmes de gestion de la fenêtre disponibles pour Linux et MacOS. Utilisez l'outil de rétroaction pour vous plaindre: https://support.microsoft.com/en-us/help/4021566/windows-10-send-feedback-a-microsoft-with-feedback-hub-app Englisons

2
HackSlash