2015/08/19

ディスプレイ電源オフでウィンドウの配置やサイズが崩れる問題と、その回避方法

Windows7Home 省電力の設定でディスプレイの自動OFF後にマウスなどでディスプレイの電源ONになった際に開いていたいくつかのWindowが全て小さくなる - Microsoft コミュニティ

ディスプレイの電源を切って入れ直すとデスクトップの各ウィンドウサイズが変わる - Microsoft コミュニティ

 Windows 利用中にディスプレイの電源をオフにすると、何故かウィンドウの配置やサイズが崩れてしまう(画面左上方へ押し込められてしまう)現象。
 どうも画面解像度の変更処理(ないしはそれに類似した処理)が走ってしまっているようなのですが、この現象、自分も困ってるんですよね。

 翌日へ作業を持ち越すためにログオフしないでロックだけして帰る時、ディスプレイの電源をオフにできないのです。
 放置しておけば省電力モードへ移行するのですが、それまでの間に「マメな人」がディスプレイの電源を切ってくれたりするわけで、そんな時は翌朝悲惨なことになります。

 理屈で考えて「ディスプレイからの信号が無くなったからといって解像度を変える必要はなく、新たな信号がくるまで現状の解像度を維持すれば良いだけ」なのですから、この現象はディスプレイドライバの問題であると理解しています。
 しかし「仕様」と考えて(=諦めて)あまり深く突っ込んでいませんでしたが、そうか、VGA端子を使うという手もありましたか。

 試しに VGA端子で(わざわざ VGAケーブルを探して)接続して試してみると…おぉ、自分の環境では再現しません。
 この辺り、リンク先でも書いておられるように、VGA規格の旧さが奏功しているのでしょうね。

 ともあれ、これでメデタシメデタシ…なわけ無いだろ!
 CRTディスプレイが絶滅した今、何が悲しくて VGA なんぞ使わなくてはいけないのかと。

----------

 そこで、この問題を(とりあえず)回避する「手抜き Tips」を紹介します。
 要は、ディスプレイの電源をオフする際、予めディスプレイとログオン中ユーザとの "リンク" を切断しておけばよいのです。

 「ディスプレイとログオン中ユーザとの "リンク" を切断」と言ってもどうするか。
 ロック(Windowsキー + Lキー)だけでは不可です。前述のとおり再現してしまいます。ログオフすれば当然に切断できますが、それだと意味がありません(やれるならやってる)。

 現行のクライアント向け Windows(Windows Vista ~ 8.1、そして恐らく 10 も)であれば、「Ctrlキー + Altキー + Delキー」のメニューを表示して、「ユーザの切り替え」を選択(Altキー + Wキー)します。これで切断されます(正しくは「コンソール・セッションでなくなる」と表現すればいいのかな)。
 実際に別のユーザでログオンする必要はなく、この手順でログオン画面にするだけで可です。

 復帰する時は、普通にパスワードを入力すればログオンしていたユーザへ戻れます(普通にロックしていた時より、若干時間は要しますが)。
 仮にディスプレイの電源が切られていても、ウィンドウの配置やサイズは元のままです。

 これで「マメな人」にディスプレイ電源をオフにしてもらっても大丈夫です(…しかし、なんでここまでせにゃならんのだ…という気はする)。

 以上、「手抜き Tips」でした。
 まぁ「手抜き」とはいっても、「手を抜かず回避」(=解決)しようとすると、恐らくディスプレイドライバに対応してもらうしか無いんですけどね、この問題。

----------

Afterfollow 2016/10/03


 世の中、有徳の士というのはいらっしゃるもので、解決方法が公開されていました。

DisplayPort接続時のディスプレイのオンオフによるウィンドウの再配置について - 塵の雨日記

 以下のレジストリを変更すると、ディスプレイを切断してもウィンドウの配置やサイズが崩れないとのこと。
 物理ディスプレイ切断時に切り替わる仮想的なディスプレイがあって、その画面サイズがこのレジストリ値で指定できるのでしょう。

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\Configuration\SIMULATED_(数字アルファベットの羅列)\00]
PrimSurfSize.cx = 横ピクセル数
PrimSurfSize.cy = 縦ピクセル数

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\Configuration\SIMULATED_(数字アルファベットの羅列)\00\00]
ActiveSize.cx = 横ピクセル数
ActiveSize.cy = 縦ピクセル数

 この現象、Windows 10 では発生しませんが、やはりまだまだ Windows 7 や 8 の方もいらっしゃることですし、Afterfollow として追記しておきます。
コメントを投稿