Como posso forçar o Windows 10 a realmente abrir programas exatamente no mesmo local e com exatamente o mesmo tamanho?

Como posso forçar o Windows 10 a realmente abrir programas exatamente no mesmo local e com exatamente o mesmo tamanho?

Recentemente atualizei para o Windows 10 no meu PC doméstico. No Windows 7, eu tinha alguns programas de inicialização que costumava configurar para abrir em um segundo monitor na inicialização. Esses programas sempre abririam no mesmo local e com o mesmo tamanho. Presumo que este seja um recurso do Windows e/ou do próprio programa.

No Windows 10 notei que alguns programas não apresentam esse comportamento. Eles são abertos especificamente no mesmo local, mas 10-20px mais curtos na direção horizontal. Por exemplo, na inicialização (ou mesmo durante o uso geral), maximizarei horizontalmente o Windows explorer.exe. Porém, quando o Explorer é aberto novamente, 10-20px de largura são retirados dos lados esquerdo e direito da janela

insira a descrição da imagem aqui

Na imagem acima, a parte superior mostra o explorador aberto e maximizado horizontalmente. A parte inferior mostra o Explorer aberto novamente após fechar e seu local e tamanho padrão definidos pelo (presumo) Windows. (O azul claro é o fundo da imagem, o preto é "terra de ninguém" no espaço da área de trabalho, o cinza escuro é o fundo da minha área de trabalho, as linhas vermelhas mostram a localização geral da largura ausente da janela).


Como posso forçar o Windows 10 averdadeiramentee sempre abrir programas exatamente no mesmo local e com exatamente o mesmo tamanho?

Observe que alguns programas não apresentam esse problema. Especificamente no Firefox, ele sempre abrirá exatamente no mesmo local e com o mesmo tamanho. Embora eu tenha certeza absoluta de que esse é um recurso do Firefox. Considerando explorer.exeo Windows, então sei que esse problema também está no lado do Windows.

Responder1

Existe uma ferramenta gratuita que usa a linguagem de script do AutoHotkey.

Um usuário chamado gallaxhar criou um script na postagem Restaure automaticamente a última posição da janela para cada processo que atua como um gerenciador de janelas automático que salva as posições das janelas sem nenhuma entrada ou configuração do usuário. Funciona obtendo as informações da janela ativa atual (id e nome do processo). Ele salva o tamanho/posição da janela mais recente em um iniarquivo e lê esse arquivo quando novos IDs de janela se tornam ativos. Ele dimensionará automaticamente apenas as janelas após a execução, dimensionará automaticamente apenas novos IDs e fará isso apenas uma vez para esse ID.

Após instalar o AutoHotkey, coloque o script em um .ahkarquivo. Teste clicando duas vezes para iniciar. Ele terá um ícone “H” verde na barra de bandeja, no qual você pode clicar com o botão direito para Sair. Depois de comprovado que está funcionando corretamente, você pode colocá-lo na pasta Inicializar.

Testei o script e parece funcionar no seu cenário.

O roteiro está reproduzido aqui:

; 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

Uma ferramenta comercial que também lembra e restaura a posição e o tamanho de programas e janelas é DeskSoft WindowManager (10$, software de teste).

Esta ferramenta lembrará posições e tamanhos nas reinicializações.

Responder2

Esse problema é tão antigo e comum que muitos desenvolvedores diferentes lançaram projetos para cobrir a deficiência do sistema operacional Windows.

Muitos são gratuitos: http://www.stefandidak.com/windows-layout-manager/

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

Algumas pessoas notaram que se você mover o menu Iniciar para cima, em vez de para baixo, o Windows se comporta de maneira diferente.

Você também pode reclamar com a Microsoft. Isso é algo que deveria funcionar como em outros sistemas de gerenciamento de janelas disponíveis para Linux e MacOS. Use a ferramenta de feedback para reclamar:https://support.microsoft.com/en-us/help/4021566/windows-10-send-feedback-to-microsoft-with-feedback-hub-app

informação relacionada