アプリケーションの更新後に予期しないDPI認識が変更されます
もともとDPI-Unaware(WindowsのUIスケーリングに依存する)として設計されたいくつかのアプリケーションは、マイナーな更新後に予期せずDPI-AWARE(システム認識)になる場合があります。 これは、アプリケーションがマニフェストと外部依存関係が変更されていない場合でも発生します。 根本原因:この動作は、多くの場合、DPI-Awareのサードパーティコンポーネントまたは依存関係によって引き起こされます。 アプリケーションマニフェストにおける明示的なDPI-Unaware宣言があっても、そのようなコンポーネントを含めることは設定をオーバーライドし、DPI-AWARENESHを強制することができます。 DPI認識を定義するためのソリューション:
いくつかのアプローチは、アプリケーションのDPI認識を明示的に制御できます:
1。アプリケーションの変更マニフェストの変更:
を変更して、以下を含める(または除外):
app.manifest
2。 Windows API関数を利用:<code class="language-xml"><dpiaware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">false</dpiaware></code>
Windows 7:
<code class="language-csharp">[DllImport("user32.dll", SetLastError = true)] static extern bool SetProcessDPIAware();</code>
<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>
<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-Unawareアプリケーションが突然DPI-AWAREになるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。