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 のスケーリング |