DPI に関連する API およびレジストリ設定

デプロイのカスタマイズを行う必要がある場合は、以下のセクションに、インストール後のスクリプトでアクセスする必要があるレジストリ キーとシステム パラメーターについての説明があります。

この記事の内容:

プライマリ ディスプレイのネイティブの解像度

「表 1 Windows 8.1 の拡大率」には、すべてではありませんが、いくつかの一般的なディスプレイでの Windows 8.1 の拡大率の情報を記載しています。 パネル DPI はパネルの物理ピクセル密度を示し、拡大率はそのディスプレイに使用されるスケール ファクターを示します。

表 1 Windows 8.1 の拡大率

表示サイズ 画面の解像度 横 (ピクセル) 縦 (ピクセル) パネル DPI 拡大率
10.6" FHD 1920 1080 208 150%
10.6" HD 1366 768 148 100%
11.6" WUXGA 1920 1200 195 150%
11.6" HD 1366 768 135 100%
13.3" WUXGA 1920 1200 170 150%
13.3" QHD 2560 1440 221 200%
13.3" HD 1366 768 118 100%
15.4" FHD 1920 1080 143 125%
15.6" QHD+ 3200 1800 235 200%
17" FHD 1920 1080 130 125%
23" QFHD (4K) 3840 2160 192 200%
24" QHD 2560 1440 122 125%

任意のデバイスについてのこの情報をプログラムを使用して見つけるには、データのレポートを返すユーティリティ プログラムを作成します。 ネイティブのプライマリの解像度を取得するには、デスクトップの HDC と HORZRES インデックスおよび VERTRES インデックスを使用して、API GetDeviceCaps() 関数を呼び出します。

// Get desktop dc
desktopDc = GetDC(NULL);
// Get native resolution
horizontalResolution = GetDeviceCaps(desktopDc,HORZRES);
verticalResolution = GetDeviceCaps(desktopDc,VERTRES);

GetDC の詳細については、「GetDC() 関数」を参照してください。

プライマリ ディスプレイの DPI スケール ファクター

同様に、ピクセル密度は、LOGPIXELSX インデックスと LOGPIXELSY インデックスを使用して取得できます。

// Get desktop dc
desktopDc = GetDC(NULL);
// Get native resolution
horizontalDPI = GetDeviceCaps(desktopDc,LOGPIXELSX);
verticalDPI = GetDeviceCaps(desktopDc,LOGPIXELSY);

これらの結果は、「表 2 DPI スケール ファクター」に示すとおり 96 が 100% に対応する座標系で返されます。

表 2 DPI スケール ファクター

DPI スケール ファクター
96 100
120 125
144 150
192 200

Note

この API が返す結果は、アプリケーションの DPI 認識モードによって異なります。 認識モードを構成するには、以下に示すように、アプリケーション マニフェストに XML を追加する必要があります。

DPI 認識モード マニフェストの設定 戻り値
なし なし  スケール ファクターに関係なく、すべてのディスプレイで 96
システム DPI 対応 <dpiAware>True</dpiAware> Windows セッションの開始時 (ユーザーが初めて Windows にログインしたとき) のプライマリ ディスプレイの DPI
モニターごとの DPI 対応 <dpiAware>True/PM</dpiAware> Windows セッションの開始時 (ユーザーが初めて Windows にログインしたとき) のプライマリ ディスプレイの DPI。 アプリケーションが配置されているディスプレイの DPI を取得するには、GetWindowDpi() または GetDpiForMonitor() を使用します

このマニフェストの設定の詳細については、「SetProcessDPIAware 関数」を参照してください。

スケーリング モード

[コントロール パネル] > [デスクトップのカスタマイズ] > [ディスプレイ] ユーザー インターフェイス (UI) には、[すべてのディスプレイで同じ拡大率を使用する]というチェックボックスがあります。このチェックボックスは、システムですべてのディスプレイに 1 つのスケール ファクターを適用する (Windows 8 以前のバージョンの Windows での動作) か、それぞれのディスプレイのピクセル密度を考慮に入れた異なるスケール ファクターを適用する (Windows 8.1 の既定の動作) かをコントロールするものです。 Windows 8.1 では、このチェックボックスは HKCU\Control Panel\Desktop\Win8DpiScaling レジストリ キーを構成します。

表 3 HKCU\Control Panel\Desktop\Win8DpiScaling の値

キーの値 意味
0 ディスプレイごとに異なるスケール ファクターが適用されます (Windows 8.1 の既定)。あるディスプレイから別のディスプレイに移されるコンテンツは適切なサイズになりますが、ビットマップスケールになる可能性があります。
1 すべてのディスプレイに同じスケール ファクターが適用されます (Windows 8 以前の Windows バージョンの動作)。 あるディスプレイから別のディスプレイに移されるコンテンツが適切なサイズにならないことがあります。

Windows 8.1 スケーリング モードでのスケールの上書き

システムが Windows 8.1 スケーリング モードで稼働している場合に [すべてのディスプレイで同じ拡大率を使用する] チェックボックスをクリアすると、ユーザーは表示されるスライダーで現行のスケール ファクターを上書きして [小] から [中] や [大] に変更することができます。 この設定は HKCU\Control Panel\Desktop\DesktopDPIOverride レジストリ キーで構成されます。

表 4 HKCU\Control Panel\Desktop\DesktopDPIOverride の値

キーの値 意味
<0 各ディスプレイのスケール ファクターを、既定値から、この値の単位数だけレベル下げします (たとえば、既定のスケーリングが 150% の場合、-1 は 125% に対応し、-2 は 100% に対応します)。
0 各ディスプレイの既定値を使用します。
0> 各ディスプレイのファクターを、この値の単位数だけレベル上げします (前述の例の場合、+1 は 200% のスケーリングに対応します)。

このモードではすべてのディスプレイのスケール ファクターが 100%、125%、150%、200% の 4 つの値のいずれかに制限されます。 さらに、スケーリングの適用後は、アプリケーションの解像度の有効線数 (ディスプレイの物理垂直解像度をスケール ファクターで除算した数) が 720 以上である必要があります。このために、有効なディスプレイ スケール ファクターの範囲はさらに狭められることになります。 「表 5 ディスプレイの値」は、さまざまなサイズのディスプレイに使用可能な値を示しています。

表 5 ディスプレイの値

縦線 サポートされるスケール ファクター
900 未満 100%
900 以上 1080 未満 100%、125%
1080 以上 1440 未満 100%、125%、150%
1440 以上 100%、125%、150%、200%

Windows 8 のスケーリング モードでのシステム全体のスケール ファクター

[すべてのディスプレイで同じ拡大率を使用する] チェックボックスが選択されている場合、ユーザーは、各ディスプレイのピクセル密度に関係なくすべてのディスプレイに適用されるスケール ファクターを指定できます。 カスタムの設定を使用することにより、ユーザーは 100%、125%、150%、200% 以外の値を選択できます。ただし、選択できる値は一定の範囲 (100% から 500% まで) に制限されます。 この設定は HKCU\Control Panel\Desktop\LogPixels レジストリ キーで構成されます。

表 6 HKCU\Control Panel\Desktop\LogPixels の値

キーの値 意味
96 すべてのディスプレイで 100% のスケーリング
120 すべてのディスプレイで 125% のスケーリング
144 すべてのディスプレイで 150% のスケーリング
192 すべてのディスプレイで 200% のスケーリング
<other> すべてのディスプレイで <その他の> 96/100 のスケーリング

高 DPI アプリケーションの開発に関するドキュメント

IT 担当者向けの高 DPI サポート