高dpiスケーリングを強制する方法は?


27

アプリケーションを強制的に高dpiにスケーリングするにはどうすればよいですか?

  • 開発者が実際にそうではないときに、アプリケーションが高dpiを認識していると見せかけます。dpiスケーリングを強制するにはどうすればよいですか?

  • HighDpiAwareアプリケーションが実際には適用されない場合に、Microsoftが互換性シムを適用したアプリケーションがあると想定します。dpiスケーリングを強制するにはどうすればよいですか?

Windowsにアプリケーションにdpiスケーリングを適用させるにはどうすればよいですか?


編集:高dpiスケーリングとは何ですか?

すべてのユーザーが96dpiでWindowsを実行しているわけではありません。すべてのボタンが75x23ピクセルであるとは限りません。すべてのツールバーが25ピクセルの高さであるとは限りません。また、すべてのツリービューグリフが16x16であるとは限りません。ユーザーがWindows用に別のdpi設定を選択した場合、すべてを適切にスケーリングする必要があります。

問題は、高dpiの設定をうまく処理して仕事をする開発者がほとんどいないことです。せいぜいすべてが「同じサイズ」のままです。つまり、すべてがちっぽけなように見えます。最悪の場合、テキストはクリップされ、コントロールは表示されず、フォームが誤ってレイアウトされます。

Windows Vistaから開始し、デスクトップコンポジションの力を活用して、Microsoftは開発者の仕事をあきらめ、現在はアプリケーションに横たわっています。ユーザーが96dpiで実行していることをアプリに伝えます。その後、Windowsはビデオカードとデスクトップコンポジションを使用して、フォームを拡大します。

利点:フォームのコンテンツは読みやすいサイズになります。
短所:すべてが少しあいまいになります。

この「高dpiスケーリング」機能は、ユーザーの裁量でのみ機能し、次のものが必要です。

  • Windows Vista以降
  • 有効にするデスクトップコンポジション
  • ユーザーが「Windows XPスタイルのスケーリングを使用する」をオフにする
  • ユーザーがアプリケーションのスケーリングを無効にしないようにする

開発者は、高dpiスケーリングをオプトアウトできます。アプリケーションを適切に記述しようと努力し、高dpiを適切に処理できることがわかっている場合。マニフェストエントリを実行可能ファイルに追加して、このスケーリングをオプトアウトし、「high-dpi対応」であることを宣言します。

アプリケーションがユーザーの設定(フォントフェイス、フォントサイズ、dpi設定を含む)を尊重する方法のトピックは、の質問ですstack overflow。「高dpi認識」を宣言するマニフェストエントリの構文も同様です。

スーパーユーザーに関するこの質問は、実際にアプリケーション高dpiを認識していない場合に、先に進んで高dpiを認識するマニフェストエントリを追加した開発者を無視する方法です。彼らはWindowsにスケーリングを無効にするように言ったが、彼らは実際にアプリケーションをテストしなかった。「高DPI対応」マニフェストエントリを備えたソフトウェアがあり、現在、アプリケーションは「大きなフォント」(例:120dpi)では使用できません。


私もこれに興味があります。dpiに対応しておらず、元々800x600の画面用に設計された重要なアプリケーションがあります。Windowsはデフォルトではスケーリングせず、XP、Vista、7のどれを使用しても違いはありません。スタッフはこの800x600アプリでほとんどの時間を費やしているため、20インチLCDモニターの使用を主張しています。 800×600の解像度でなど、これは巨大な廃棄物である、と彼らはMS Officeを使用する必要がある場合、画素の自ら招い不足が彼らの邪魔になる、IE8!
マイルエリクソン

1
Microsoftがデスクトップコンポジション(一部は誤ってAeroと呼んでいるもの)を活用して、特にスケーリングをオプトアウトしないアプリケーションをスケーリングするためにグラフィックカードを使用し始めたのは、Windows Vista でした。XPにはスケーリングがなく、Vista 7にはスケーリングが必要ありませ。アプリケーションを適切に作成する必要があります。開発者のマシンに行き、解像度を1050に戻し、dpiを168に設定します。アプリが正しく動作しないことを除いて、すべてがtardモードで同じ巨大なズームになります。修理されるまで、食べ物や水を飲まないことを伝えます。
イアン・ボイド

使用するアプリを作成する開発者に常にアクセスできるとは限りません。私たちがやっただけなら
円柱

フォーム=形状?
ジグガンジャー

回答:


5

うーん 私の提案は、マニフェストを編集し、誤った宣言を削除することです。そして、それについて開発者をバグすることを忘れないでください!

編集:マニフェストを実行可能ファイルの横に配置するだけでよいことに注意してください。たとえばfoo.exe、にマニフェストを配置しfoo.exe.manifestます。MSDNの記事を参照してください(「ファイル名の構文」というセクションをご覧ください)。


これが唯一の方法だと思います。欠点は、アプリケーションのデジタル署名が無効になることです。
イアン・ボイド

@Ian:あなたがいないように見える持っているリソースにマニフェストを置くこと。
SamB

3
以前は、.manifestファイルは実行可能ファイル内のマニフェストよりも優先されていました。現在、実行可能ファイルに組み込まれたマニフェストは、外部.manifestファイルをオーバーライドします。XPのどのサービスパックで変更されたか覚えていない-SP2だったと思う。
イアン・ボイド

8

SetProcessDPIAwareへの呼び出しをフックしてリダイレクトするDLLをリリースしました。コードを介したDPIスケーリングを無効にするアプリケーションの場合、これは高速で簡単な修正です(バイナリパッチと比較)。

DPIMangler:ブログ投稿ソースコード


6

マニフェストは引き続き編集できますが、.EXEファイル自体で編集する必要があります。マニフェストをサポートしているリソースエディターを探します。初歩的なサポートの例はXNリソースエディターです。)HIGHDPIAWAREに言及している行を見つけて削除し、実行可能ファイルを保存します。

ただし、編集する前に実行可能ファイルのコピーを作成してください。


「欠点は、アプリケーションのデジタル署名が無効になることです。」
イアン・ボイド

0

ResizeEnableはあなたが探しているものだろうか?

http://www.digitallis.co.uk/pc/ResizeEnable/


いいえ、ウィンドウは既にサイズ変更可能です。問題は、コンポジターが表示用にウィンドウを合成するときです。アプリケーションがスケーリングする必要がないと言っているので、現時点では特別なことはしていません。しかし、実際には窓がないスケーリングする必要があります。
イアン・ボイド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.