Windows 10 でプログラムをまったく同じ場所でまったく同じサイズで開くように強制するにはどうすればよいでしょうか?

Windows 10 でプログラムをまったく同じ場所でまったく同じサイズで開くように強制するにはどうすればよいでしょうか?

最近、自宅の PC を Windows 10 にアップグレードしました。Windows 7 では、起動時に 2 番目のモニターで開くように設定して、よく使用するいくつかのスタートアップ プログラムがありました。これらのプログラムは常に同じ場所に同じサイズで開きます。これは Windows とプログラム自体の両方の機能だと思います。

Windows 10 では、一部のプログラムではこの動作が表示されないことに気付きました。具体的には、同じ場所で開かれますが、水平方向に 10 ~ 20 ピクセル短くなります。たとえば、起動時 (または通常の使用時) に Windows を水平方向に最大化しますexplorer.exe。ただし、エクスプローラーを再度開くと、ウィンドウの左側と右側から 10 ~ 20 ピクセルの幅が取られます。

ここに画像の説明を入力してください

上の画像では、上部にエクスプローラーが開かれ、水平方向に最大化されています。下部には、閉じた後に再度開かれたエクスプローラーと、(おそらく) Windows によって設定された既定の位置とサイズが表示されています。(明るい青は画像の背景、黒はデスクトップ スペースの「無人地帯」、濃い灰色は私のデスクトップの背景、赤い線はウィンドウの幅が不足している大まかな位置を示しています)。


Windows 10を強制的に本当にプログラムを常にまったく同じ場所でまったく同じサイズで開くのですか?

注意: 一部のプログラムではこの問題は発生しません。特に Firefox では、常にまったく同じ場所でまったく同じサイズで開きます。ただし、これは Firefox の機能であることは間違いありません。ただしexplorer.exe、Windows の場合、この問題は Windows 側にあることもわかります。

答え1

のスクリプト言語を使用する無料ツールが存在する。 オートホットキー

gallaxharというユーザーが投稿にスクリプトを作成しました 各プロセスの最後のウィンドウ位置を自動的に復元する これは、ユーザー入力や設定なしでウィンドウの位置を保存する自動ウィンドウ マネージャーとして機能します。これは、現在アクティブなウィンドウ情報 (ID とプロセス名) を取得することによって機能します。最新のウィンドウのサイズ/位置をファイルに保存しini、新しいウィンドウ ID がアクティブになったときにそのファイルから読み取ります。実行後、ウィンドウのサイズのみを自動調整し、新しい ID のサイズのみを自動調整し、その ID に対して 1 回だけサイズを調整します。

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 OS の欠陥を補うプロジェクトをリリースしてきました。

多くは無料です: 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/ja-jp/help/4021566/windows-10-send-feedback-to-microsoft-with-feedback-hub-app より

関連情報