1.概要
ディスプレイのサイズ(32型など)や解像度(FHD:1920×1080など)によって
文字やアイコンなどがwindowsが推奨する大きさに自動的に設定されるようになりました。
この自動的というタイミングですが、特定の型式のディスプレイをを初めて接続した時になります。
※過去に接続したことのあるディスプレイについては、情報がレジストリに記憶されています。
これはアプリケーションを作成において邪魔になる場合があります。
今回の目的は初めて接続したディスプレイでもwindowsが推奨する大きさを無視し
100%の状態で表示するようにしたい...というところになります。
2.テキスト、アプリ、その他の項目のサイズを変更するとは?
デスクトップを右クリックし【ディスプレイ設定】を開くと
下図のウィンドウが開きます。

【拡大縮小とレイアウト】に
【テキスト、アプリ、その他の項目のサイズを変更する】があります。
ここの値が125%だったり150%だったり接続するディスプレイによって
windowsが推奨する大きさに自動的に設定されます。
レジストリでいうと
【HKEY_CURRENT_USER\Control Panel\Desktop\PerMonitorSettings\接続されているディスプレイ\DpiValue】
になります。

私が使っているディスプレイは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をロスしても
ディスプレイ解像度を設定値に保つことが出来ます。

【PrimSurfSize.cx】:width
【PrimSurfSize.cy】:height

【ActiveSize.cx】:width
【ActiveSize.cy】:height
【Rotation】:1に設定すると横画面、2に設定すると縦画面になります。
【【【 問題発生 】】】
これを4Kの解像度(3840×2160)に設定しても
4Kのレイアウトは維持されないようです。
これは理由はわかりませんが【NVIDIA】では問題なく動作しました。
どうやらグラフィックボードによって設定可能な範囲が異なるようです。