web-dev-qa-db-ja.com

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

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

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

enter image description here

上の画像では、上部にエクスプローラーが開いて水平方向に最大化されていることが示されています。下部には、閉じた後に再び開いたエクスプローラーと、Windowsによって設定されたデフォルトの場所とサイズが表示されます。 (水色は画像の背景、黒はデスクトップスペースの「無人地帯」、濃い灰色は私のデスクトップの背景、赤い線はウィンドウの欠落している幅の一般的な場所を示しています)。


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

一部のプログラムにはこの問題がないことに注意してください。具体的にはFirefoxで、常にまったく同じ場所でまったく同じサイズで開きます。私は完全にこれがFirefoxの機能であると確信していますが。与えられたExplorer.exe is Windows 'の場合、この問題はWindows'側でも発生します。

7
KDecker

AutoHotkey のスクリプト言語を使用する無料のツールが存在します。

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 WindowManager (10 $、トライアルウェア)です。

このツールは、再起動後の位置とサイズを記憶します。

4
harrymc

この問題は非常に古く、非常に一般的であるため、多くの異なる開発者がWindowsOSの欠陥をカバーするプロジェクトをリリースしています。

多くは無料です: http://www.stefandidak.com/windows-layout-manager/

またはオープンソース: https://github.com/lapo-luchini/WindowsLayoutSnapshot/tree/v1.3.0.

スタートメニューを下ではなく上に移動すると、Windowsの動作が異なることに気づいた人もいます。

マイクロソフトに文句を言うこともできます。これは、LinuxおよびMacOSで利用可能な他のウィンドウ管理システムと同じように機能するはずです。フィードバックツールを使用して文句を言う: https://support.Microsoft.com/en-us/help/4021566/windows-10-send-feedback-to-Microsoft-with-feedback-hub-app ==

2
HackSlash