ホームページ > バックエンド開発 > C++ > 更新後にDPI-Unawareアプリケーションが突然DPI-AWAREになるのはなぜですか?

更新後にDPI-Unawareアプリケーションが突然DPI-AWAREになるのはなぜですか?

Patricia Arquette
リリース: 2025-01-28 08:56:10
オリジナル
755 人が閲覧しました

Why Does My DPI-Unaware Application Suddenly Become DPI-Aware After an Update?

アプリケーションの更新後に予期しないDPI認識が変更されます

もともとDPI-Unaware(WindowsのUIスケーリングに依存する)として設計されたいくつかのアプリケーションは、マイナーな更新後に予期せずDPI-AWARE(システム認識)になる場合があります。 これは、アプリケーションがマニフェストと外部依存関係が変更されていない場合でも発生します。

根本原因:

この動作は、多くの場合、DPI-Awareのサードパーティコンポーネントまたは依存関係によって引き起こされます。 アプリケーションマニフェストにおける明示的なDPI-Unaware宣言があっても、そのようなコンポーネントを含めることは設定をオーバーライドし、DPI-AWARENESHを強制することができます。 DPI認識を定義するためのソリューション:

いくつかのアプローチは、アプリケーションのDPI認識を明示的に制御できます:

1。アプリケーションの変更マニフェストの変更:

を変更して、以下を含める(または除外):

  • app.manifest2。 Windows API関数を利用:
<code class="language-xml"><dpiaware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">false</dpiaware></code>
ログイン後にコピー
適切なAPI呼び出しは、Windowsバージョンに依存します

Windows 7:

  • Windows 8.1:
<code class="language-csharp">[DllImport("user32.dll", SetLastError = true)]
static extern bool SetProcessDPIAware();</code>
ログイン後にコピー
  • windows 10(1703以降):
<code class="language-csharp">[DllImport("shcore.dll")]
static extern int SetProcessDpiAwareness(ProcessDPIAwareness value);

enum ProcessDPIAwareness
{
    DPI_Unaware = 0,
    System_DPI_Aware = 1,
    Per_Monitor_DPI_Aware = 2
}</code>
ログイン後にコピー
  • 3。
を使用します この属性を追加して、コンポーネント参照に基づいてシステム定義のDPI認識をオーバーライドします:
<code class="language-csharp">[DllImport("user32.dll", SetLastError = true)]
static extern int SetProcessDpiAwarenessContext(DpiAwarenessContext value);

enum DpiAwarenessContext
{
    Context_Unaware = (DPI_AWARENESS_CONTEXT)-1,
    Context_SystemAware = (DPI_AWARENESS_CONTEXT)-2,
    Context_PerMonitorAware = (DPI_AWARENESS_CONTEXT)-3,
    Context_PerMonitorAwareV2 = (DPI_AWARENESS_CONTEXT)-4
}</code>
ログイン後にコピー

AssemblyInfo.cs重要な考慮事項:

DPI認識はスレッド固有です。 個々のスレッドをよく制御するために、スレッド固有のAPI関数を使用します。
<code class="language-csharp">[assembly: System.Windows.Media.DisableDpiAwareness]</code>
ログイン後にコピー
すべてのサードパーティのコンポーネントと依存関係が、目的のDPI認識レベルと一致していることを確認してください。

以上が更新後にDPI-Unawareアプリケーションが突然DPI-AWAREになるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート