Как заставить Windows 10 действительно открывать программы в том же месте и с тем же размером?

Как заставить Windows 10 действительно открывать программы в том же месте и с тем же размером?

Недавно я обновил свой домашний ПК до Windows 10. В Windows 7 у меня было несколько программ автозагрузки, которые я часто использовал, настроенных на открытие на втором мониторе при запуске. Эти программы всегда открывались в одном и том же месте и с одинаковым размером. Я предполагаю, что это особенность как Windows, так и/или самой программы.

В Windows 10 я заметил, что некоторые программы не показывают такое поведение. Они специально открываются в том же месте, но на 10-20 пикселей короче в горизонтальном направлении. Например, при запуске (или даже во время обычного использования) я горизонтально разворачиваю Windows explorer.exe. Однако, когда проводник затем открывается снова, 10-20 пикселей ширины берутся с левой и правой стороны окна

введите описание изображения здесь

На изображении выше верхняя часть показывает проводник, открытый и развернутый по горизонтали. Нижняя часть показывает проводник, открытый снова после закрытия, и его местоположение и размер по умолчанию, установленные (я предполагаю) Windows. (Светло-голубой цвет — фон изображения, черный — «ничейная земля» в пространстве рабочего стола, темно-серый — фон моего рабочего стола, красные линии показывают общее расположение недостающей ширины окна).


Как я могу заставить Windows 10действительнои всегда открывать программы в одном и том же месте и с одинаковым размером?

Обратите внимание, что в некоторых программах этой проблемы нет. В частности, Firefox всегда открывается в одном и том же месте с одним и тем же размером. Хотя я полностью уверен, что это особенность Firefox. Поскольку это explorer.exeWindows, то я знаю, что эта проблема также касается и Windows.

решение1

Существует бесплатный инструмент, который использует язык скриптов AutoHotkey.

Пользователь по имени gallaxhar создал скрипт в посте Автоматически восстанавливать последнюю позицию окна для каждого процесса который действует как автоматический оконный менеджер, сохраняющий позиции окон без ввода или настройки пользователем. Он работает, получая информацию о текущем активном окне (идентификатор и имя процесса). Он сохраняет последний размер/позицию окна в файл iniи считывает из этого файла, когда новые идентификаторы окон становятся активными. Он будет автоматически изменять размер только окон после запуска, он будет автоматически изменять размер только новых идентификаторов, и он сделает это только один раз для этого идентификатора.

После установки AutoHotkey поместите скрипт в .ahkфайл. Проверьте, дважды щелкнув для запуска. Он будет иметь зеленую иконку "H" в трее, которую вы можете щелкнуть правой кнопкой мыши, чтобы выйти. После того, как вы убедитесь, что он работает правильно, вы можете поместить его в папку "Автозагрузка".

Я протестировал скрипт, и, похоже, он работает в вашем случае.

Сценарий воспроизведен здесь:

; 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

Коммерческий инструмент, который также запоминает и восстанавливает положение и размер программ и окон, DeskSoft Оконный менеджер (10$, пробная версия).

Этот инструмент запомнит положение и размеры при перезагрузках.

решение2

Эта проблема настолько стара и распространена, что многие разработчики выпустили проекты, призванные устранить этот недостаток в ОС Windows.

Многие из них бесплатны: http://www.stefandidak.com/windows-layout-manager/

или с открытым исходным кодом: https://github.com/lapo-luchini/WindowsLayoutSnapshot/tree/v1.3.0.0

Некоторые замечают, что если переместить меню «Пуск» наверх, а не вниз, то Windows ведет себя по-другому.

Вы также можете пожаловаться в Microsoft. Это должно работать так же, как и в других системах управления окнами, доступных для Linux и MacOS. Используйте инструмент обратной связи, чтобы пожаловаться:https://support.microsoft.com/en-us/help/4021566/windows-10-send-feedback-to-microsoft-with-feedback-hub-app

Связанный контент