中堅プログラマーの備忘録

忘れっぽくなってきたので備忘録として・・・

【windows10】-テキスト、アプリ、その他の項目のサイズを変更する-を100%固定にしたい

1.概要

ディスプレイのサイズ(32型など)や解像度(FHD:1920×1080など)によって
文字やアイコンなどがwindowsが推奨する大きさに自動的に設定されるようになりました。
この自動的というタイミングですが、特定の型式のディスプレイをを初めて接続した時になります。
※過去に接続したことのあるディスプレイについては、情報がレジストリに記憶されています。
これはアプリケーションを作成において邪魔になる場合があります。

今回の目的は初めて接続したディスプレイでもwindowsが推奨する大きさを無視し
100%の状態で表示するようにしたい...というところになります。

2.テキスト、アプリ、その他の項目のサイズを変更するとは?

デスクトップを右クリックし【ディスプレイ設定】を開くと
下図のウィンドウが開きます。
f:id:tsu--kun:20191002100546p:plain


【拡大縮小とレイアウト】に
【テキスト、アプリ、その他の項目のサイズを変更する】があります。

ここの値が125%だったり150%だったり接続するディスプレイによって
windowsが推奨する大きさに自動的に設定されます。

レジストリでいうと
【HKEY_CURRENT_USER\Control Panel\Desktop\PerMonitorSettings\接続されているディスプレイ\DpiValue】
になります。
f:id:tsu--kun:20191002100559p:plain


私が使っているディスプレイは27型の4Kディスプレイなのですが
値は下表のとおりになりました。

倍率 設定値
100% 0xFFFFFFFE
125% 0xFFFFFFFF
150%(推奨) 0x00000000
175% 0x00000001
200% 0x00000002

どうやら推奨値の0を基準として
拡大毎に【+1】、縮小毎に【-1】といった感じのようです。

3.100%固定にするためには?

では早速設定をしていきます。
設定は全てレジストリで行います。
設定する項目は【HKEY_CURRENT_USER\Control Panel\Desktop】にあります。

①【Win8DpiScaling】

デフォルトの0から1に変更します。

これはwindows8でいう【すべてのディスプレイで同じ拡大率を使用する】に当たります。
windows10ではUIから削除され、レジストリにのみ残っている状態になっています。

②【LogPixels】

デフォルトでは存在しないのでREG_DWORDで作成します。
値は96に設定します。
対応については下表のとおりです。

設定値 倍率
96 100%
120 125%
144 150%
192 200%

これは直接倍率に関わってくるところになります。
ですが①を【1】に設定しないとこの設定がが有効にならないようです。
私は150%の状態で【96】にし再起動をしてみましたが
変化はなく、合わせて①を【1】に設定し再起動すると
100%の状態で起動しました。

4.ディスプレイの接続がない時の解像度は?

ディスプレイの電源を落としたり、映像ケーブル(HDMIやDP)を抜いた時など
デスクトップのレイアウトが崩れてしまうことがあります。
これは何故かというと、ディスプレイからのEDIDが取得できず
デフォルトの解像度が選択されてしまうからです。

このデフォルトの解像度というのが厄介で
グラフィックボードによって異なるようです。
私の場合ですが【Intel HD Graphics】なのですが
この場合下記のレジストリが該当します。
【HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\Configuration\SIMULATED_*****】
※【SIMULATED】の部分が【NOEDID】の場合もあります。


ここにある値を下図のとおり変更することでEDIDをロスしても
ディスプレイ解像度を設定値に保つことが出来ます。
f:id:tsu--kun:20191002100610p:plain
【PrimSurfSize.cx】:width
【PrimSurfSize.cy】:height


f:id:tsu--kun:20191002100618p:plain
【ActiveSize.cx】:width
【ActiveSize.cy】:height
【Rotation】:1に設定すると横画面、2に設定すると縦画面になります。


【【【 問題発生 】】】
これを4Kの解像度(3840×2160)に設定しても
4Kのレイアウトは維持されないようです。
これは理由はわかりませんが【NVIDIA】では問題なく動作しました。

どうやらグラフィックボードによって設定可能な範囲が異なるようです。