¿Cómo puedo forzar a Windows 10 a abrir programas exactamente en la misma ubicación y con exactamente el mismo tamaño?

¿Cómo puedo forzar a Windows 10 a abrir programas exactamente en la misma ubicación y con exactamente el mismo tamaño?

Recientemente actualicé a Windows 10 en la PC de mi casa. En Windows 7 tenía algunos programas de inicio que usaba a menudo configurados para abrirse en un segundo monitor al inicio. Estos programas siempre se abrirían en la misma ubicación con el mismo tamaño. Supongo que esta es una característica tanto de Windows como del programa en sí.

En Windows 10 he notado que algunos programas no muestran este comportamiento. Específicamente se abren en la misma ubicación, pero entre 10 y 20 píxeles más cortos en la dirección horizontal. Por ejemplo, al iniciar (o incluso durante el uso general), maximizaré Windows horizontalmente explorer.exe. Sin embargo, cuando se vuelve a abrir el explorador, se toman entre 10 y 20 píxeles de ancho del lado izquierdo y derecho de la ventana.

ingrese la descripción de la imagen aquí

En la imagen de arriba, la parte superior muestra el explorador abierto y maximizado horizontalmente. La parte inferior muestra el explorador abierto nuevamente después de cerrarlo y su ubicación y tamaño predeterminados establecidos por (supongo) Windows. (El azul claro es el fondo de la imagen, el negro es "tierra de nadie" en el espacio del escritorio, el gris oscuro es el fondo de mi escritorio, las líneas rojas muestran la ubicación general del ancho faltante de la ventana).


¿Cómo puedo forzar a Windows 10 arealmente¿Y siempre abrir programas exactamente en la misma ubicación y exactamente del mismo tamaño?

Tenga en cuenta que algunos programas no tienen este problema. Específicamente Firefox, siempre se abrirá exactamente en la misma ubicación y exactamente del mismo tamaño. Aunque estoy totalmente seguro de que es una característica de Firefox. Dado que explorer.exees de Windows, entonces sé que este problema también afecta a Windows.

Respuesta1

Existe una herramienta gratuita que utiliza el lenguaje script de AutoHotkey.

Un usuario llamado Gallaxhar ha creado un script en la publicación. Restaurar automáticamente la última posición de la ventana para cada proceso que actúa como un administrador de ventanas automático que guarda las posiciones de las ventanas sin intervención ni configuración del usuario. Funciona obteniendo la información de la ventana activa actual (id y nombre del proceso). Guarda el último tamaño/pos de ventana en un iniarchivo y lee desde ese archivo cuando se activan nuevas ID de ventana. Solo ajustará automáticamente el tamaño de las ventanas después de ejecutarse, solo ajustará automáticamente el tamaño de las nuevas ID y solo lo hará una vez para esa ID.

Después de instalar AutoHotkey, coloque el script en un .ahkarchivo. Pruebe haciendo doble clic para iniciar. Tendrá un icono "H" verde en la barra de bandeja, en el que puede hacer clic derecho para salir. Una vez que se demuestre que funciona correctamente, puede colocarlo en su carpeta de Inicio.

Probé el script y parece funcionar en su escenario.

El guión se reproduce aquí:

; 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

Una herramienta comercial que también recuerda y restaura la posición y tamaño de programas y ventanas es Administrador de ventanas DeskSoft (10$, software de prueba).

Esta herramienta recordará posiciones y tamaños durante los reinicios.

Respuesta2

Este problema es tan antiguo y tan común que muchos desarrolladores diferentes han lanzado proyectos para cubrir la deficiencia en el sistema operativo Windows.

Muchos son gratis: http://www.stefandidak.com/windows-layout-manager/

o código abierto: https://github.com/lapo-luchini/WindowsLayoutSnapshot/tree/v1.3.0.0

Algunas personas han notado que si mueve el menú de inicio hacia la parte superior, en lugar de hacia abajo, Windows se comporta de manera diferente.

También puedes quejarte ante Microsoft. Esto es algo que debería funcionar como lo hace en otros sistemas de administración de ventanas disponibles para Linux y MacOS. Utilice la herramienta de comentarios para quejarse:https://support.microsoft.com/en-us/help/4021566/windows-10-send-feedback-to-microsoft-with-feedback-hub-app

información relacionada