スリープ復帰後にウィンドウが移動してしまう症状について
マルチディスプレイの環境ではよくあるトラブルですね。
スリープから復帰すると右端に常時展開しているウィンドウが移動して頭を悩ませていました。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\Configuration
対象レジストリキーのPrimSurfSize.cx、PrimSurfSize.cyなどにメイン&サブの解像度を入力しろとか、削除しろとか、ダミープラグを使えとか、メイン&サブディスプレイの解像度を合わせろとか有益な情報がたくさん出てきます。
しかしねぇ…
そんなものはねぇ……
ビデオカードのHDMIやDPから複数出力させているから直るんですよ!(たぶん)
うちはですねぇ…
面倒なことに特殊なんですよ!
まずですねビデオカードに出力は1つしかない!!
いわゆる例のグラボの亜種です。
DVI-Dが1つだけついてるんです。
そしてマルチディスプレイをやろうとすると必然的に内蔵GPUを使うしかないんです。
この内臓GPUを使うことが非常に厄介極まりない。
まずメインディスプレイがEB321HQUBbmidphx 2560×1440のDVI-D→HDMI変換(RX580)、サブが中華の安いフルHD 1920×1080のHDMI(INTEL HD Graphics 4000)になります。
この環境だとスリープ復帰時にサブが先に反映されます。
メインディスプレイが1920×1080だと認識され、その後2560×1440が認識されると1920×1080の解像度設定をそのまま2560×1440に持ってきます。
するとどうなるか?
ウィンドウが1920×1080の設定を受け左方向に移動します。
はい面倒ですね。
レジストリを弄ろうが何しようが解決しません。
EB321HQUBbmidphxが入力信号を認識するのが遅いというのも原因の1つだと思います。
復帰するたびに全ての入力を1つ1つ調べています。
そうしてるうちに中華ディスプレイが先に映ります。
諦めるか?
否、諦められんよ。
ならどう解決するか?
復帰後に元の位置にウィンドウを自動的に戻してもらえばええねん!!!
使ったのはMONITOR KEEPERというソフト。
使い方は簡単ただ起動するだけ。
ただしうちの環境では管理者権限で無いとうまいこと作動してくれなかったので注意。
タスクスケジューラで管理者権限つけて自動起動させればいい。
スリープから復帰したときウィンドウがまったく移動していない事を確認して歓喜。
しかし次の問題が発生。
デスクトップの一部アイコンがサブディスプレイに移動してしまう。
ディスプレイ設定でサブを左側から右側に設定すれば解決することはわかっています。
しかしここまで来たらパーフェクトに解決したい。
これもソフトで解決させます。
これはアイコンの位置を覚え、復帰時自動的に元に戻してくれます。
シンプルですがとてもありがたいソフトです。
マルチディスプレイでレジストリ弄っても直らない人はMONITOR KEEPER、KH DeskKeeper2018 この2つのソフトを入れたら解決すると思いますよ。
※補足
USB3.0からDVI-DやHDMIに変換する機器を通しても問題ありませんでした。
私が持っているのはDisplayLink社のチップを使ってるこれです。
アイコンを復帰させるのは15秒後に設定するといい感じでした。(10秒だと画面がおかしくなりました)