PersistentWindowsは現在もメンテナンスがされているようですが、Windowsのアップデートなどによってアプリケーション自体が機能しない、または想定外の不具合を引き起こしてしまう可能性があります。
以前の挙動との違うなど何か違和感を感じた場合にはアンインストールしてみて状況が改善するかどうかお確かめください。
PersistentWindowsとは
「PersistentWindows」は ウィンドウの表示位置を定期的に記憶して、マルチディスプレイ環境においてディスプレイの数が変動した時に自動的に以前のレイアウトを復元してくれるツールです。
DP接続ディスプレイのオン・オフやスリープで発生する ウィンドウの表示位置ズレ や レイアウト崩れを抑制してくれます。
Githubで公開されていて誰でも自由に利用することができます。
ダウンロード と 導入
まずは公開されている Github の Releaseページを開きます。
https://github.com/kangyu-california/PersistentWindows/releases
コレを書いている時点で、5.35というバージョン が Pre-release となっていたので新しい方が良い方はそちらを試すのもいいかもしれません。
今回はとりあえず、正式にリリースされている5.34をダウンロードします。

zipファイルがダウンロードできたら、zipファイルを右クリックして「すべて展開」を選択してすべて解凍します。 インストールは必要ありません。

PersistentWindows.exe を ダブルクリックして実行することができます。

実行すると、タスクバーで常駐していることを示すアイコンを確認できるようになります。

タスクバーに常駐しているアイコンを右クリックすると、コンテクストメニューが表示されます。
一番上の「Capture windows to disk」をクリックすると現在のウィンドウの状態をローカルに保存することができます。
ローカル保存した状態を復元するには、「Restore windows from disk」をクリックします。
基本的には常駐させておくだけで、ウィンドウ位置やレイアウトを 自動的に 記憶、復元してくれます。
起動直後は明示的に Capture したほうが良いかもしれません。
ツール作者 の 推奨設定
ウィンドウズを起動させるたびに exeファイル を ダブルクリックして「PersistentWindows」を起動させるのは面倒なので、スタートアップの項目として加えても良いと思うのですが、ツール作者が「タスクスケジューラ」から「ユーザーログオン時」に「PersistentWindowsが起動する」タスクの作成を推奨しています。(Githubページの下の方に記述を確認できると思います)
タスクスケジューラの設定方法

ウィンドウズボタンから「Windows システムツール」を探して開きます。

Windows システムツールの中からタスクスケジューラを探して起動させます。
タスクスケジューラ に 新規設定
タスクスケジューラを開いたら下のようなウィンドウが表示されます。
新しいタスクを作成するために、右上にある「タスクの作成」をクリックして開きます。

全般タブ の 編集

タスクの作成を開くと、左のようなウィンドウが表示されます。 最初は全般タブが選択されています。
全般タブでは、作成するタスクの「名称 や 説明文」の入力、セキュリティオプションの選択をします。
名称は任意入力です。
後で自分が見てわかるように今回は 「PersitentWindows-Run-by-Logon」としました。
説明文も任意入力です。 どのような設定をしているかを記述しておくと後で確認した時に便利だと思います。
セキュリティオプションは「ユーザーがログオンしているときのみ実行する」が選択されていることを確認します。
操作タブ の 編集

タブを 「操作」 に切り替えます。
次に、左下の「新規」ボタンをクリックします。

このウィンドウが表示されたら、「参照」をクリックして、実行可能な「PersistentWindows.exe」が置いてあるフォルダまで移動して、「PersistentWindows.exe」を選択します。
次に、引数の追加(オプション)の項目に「-delay_start 10」を追加します。
OK を押して閉じます。
設定タブ の 編集

タブを「設定」に切り替えます。
「タスクを停止するまでの時間」の チェック ✔ を外します。
OK を押して閉じます。
編集が完了したら、作成ウィンドウも OK で閉じます。
タスクスケジューラ の リスト欄に新規作成した項目が追加されていることを確認します。

リストに追加された項目をクリックすると、設定の詳細が確認できます。
ダブルクリックで編集ウィンドウを開くことができます。
問題が無いことが確認できたら、ウィンドウズを再起動します。
ログイン後、自動的にPersistentWindowsが起動すれば成功です。
あとがき
DP問題の対策系ツールでは「MonitorKeeper」というツールが有名だと思います。
MonitorKeeperは、DP接続ディスプレイの電源がONのままであるかのように OSをごまかしてくれるツールです。
今回導入した PersistentWindows とはツールの働きが違うので、「MonitorKeeper」と「PersistentWindows」の両方を併用しています。
うちの環境の話ですが、MonitorKeeper を 起動させておくと DPディスプレイをオフにしても確かにをウィンドウがメインディスプレイに集約するようなこともなく、うまくディスプレイONの状態をキープしてくれます。
しかし、そのままにしておくとどこかのタイミングでオフと認識されてしまうようです。
試しに今回紹介した、タスクスケジューラの編集から「タスクを停止するまでの時間 を 無効」にしてみても残念ながら特に挙動は変化しませんでした。
リモートで操作しているとある時点でディスプレイが減ったと認識され、拡張画面で開いていたウィンドウはメインディスプレイへ集約されます。
その後、ディスプレイの電源を入れると再び画面が2枚と認識されます。
こんな時にPersistentWindows が うまく機能してくれれば、ウィンドウのサイズがおかしくならずに元あった位置に復帰してくれると思います。
長期間使っているとディスプレイの復帰時にウィンドウが最大化するようなこともあったので、完全に抑制できるわけではなさそうです。
以前に比べればウィンドウの表示崩れの頻度がぐんと少なくなったので、ストレスが軽減されました。
一方で、こういった問題の起きないHDMIの優秀さには改めて感心させられました。
とはいえ、後発規格であるDPの方が 性能面で優位である点は今後もおそらく変わらないのではないかと思います。
最近のグラボの映像出力ポート構成を見ると 「DPポート x3、HDMI x1」の組み合わせが多いですよね。 となるとマルチディスプレイ環境では DPはほぼ避けて通れないわけです。
主流な規格だけに くだらないことがストレスの原因になってしまうのがとても惜しい気がします。
対策されたディスプレイが一般化することに期待するしかないのかもしれませんね。
最後までありがとうございました。
これからも調べてハマると思いますのでまた見に来てもらえると嬉しいです。
それではまた!



コメント