web-dev-qa-db-ja.com

WindowsアプリケーションマニフェストのdpiAwareプロパティをVisualStudioの「モニターごと」に設定するにはどうすればよいですか?

アプリケーションのマニフェストでdpiAwareプロパティを「モニターごと」に設定できる必要があります。プロパティで使用できる選択肢は、DPI認識を有効または無効にすることだけです。これらの設定はどちらも私には機能しません。マニフェストをexeに埋め込まない場合は、アプリケーションに必要な動作を取得してから、マニフェストを手動で編集できます。マニフェストを自動的に生成して埋め込みたい。足りないものはありますか? (私はVisual Studio 2013を使用しています。)

15
Wayne

Windows10の新機能はdpiAwarenessおよびdpiAwareであるため、この例を少し更新する必要があります。 dpiAwarenessが存在しない場合、設定はdpiAwareから継承されるため問題ありません。

DPI認識を完全に有効にするために、最新のWin10サポート(他の可能なオプションについては参照URLを参照)を使用します。これには、「permonitor」および「permonitorv2」が含まれます。あなたの質問がそれを尋ねるので、「システム」の代わりに。

<asmv3:application>
  <asmv3:windowsSettings>
    <dpiAware xmlns="http://schemas.Microsoft.com/SMI/2005/WindowsSettings">true/pm</dpiAware> <!-- legacy -->
    <dpiAwareness xmlns="http://schemas.Microsoft.com/SMI/2016/WindowsSettings">permonitorv2,permonitor</dpiAwareness> <!-- falls back to pm if pmv2 is not available -->
  </asmv3:windowsSettings>
</asmv3:application>

disableにするには、逆の操作を行います(dpiAwarenessはサポートされていないため、必要ありません)。

<asmv3:application>
  <asmv3:windowsSettings>
    <dpiAware xmlns="http://schemas.Microsoft.com/SMI/2005/WindowsSettings">unaware</dpiAware>
  </asmv3:windowsSettings>
</asmv3:application>

次に、GDIオブジェクトを使用して独自のものをペイントする場合は、「gdiScaling」もあります。

<asmv3:application>
  <asmv3:windowsSettings>
    <gdiScaling xmlns="http://schemas.Microsoft.com/SMI/2017/WindowsSettings">true</gdiScaling>
  </asmv3:windowsSettings>
</asmv3:application>

参照: 最新のWindows 10ビルドの時点でのDPI認識に関するMicrosoft (大規模なプロジェクトでは少し面倒な場合でも、コードをDPI認識にする方法に関するチュートリアルもあります)

17
dyasta

このマニフェストは機能し、<dpiAware>True/PM</dpiAware>は最も重要な部分です:

<?xml version="1.0" encoding="utf-8"?>
<asmv1:Assembly manifestVersion="1.0" xmlns="urn:schemas-Microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-Microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-Microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
  <trustInfo xmlns="urn:schemas-Microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-Microsoft-com:asm.v3">
        <requestedExecutionLevel level="asInvoker" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>

  <compatibility xmlns="urn:schemas-Microsoft-com:compatibility.v1">
    <application>
      <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
    </application>
  </compatibility>

  <asmv3:application xmlns:asmv3="urn:schemas-Microsoft-com:asm.v3">
    <asmv3:windowsSettings
         xmlns="http://schemas.Microsoft.com/SMI/2005/WindowsSettings">
      <dpiAware>True/PM</dpiAware>
    </asmv3:windowsSettings>
  </asmv3:application>

</asmv1:Assembly>
16
Warren P

Windows 10 1607では、dpiAwarenessという名前の新しいプロパティが導入されました。フォールバックDPIスケーリングオプションを選択でき、存在する場合はdpiAwareプロパティをオーバーライドします。最高の互換性を得るには、これらの両方を指定し、アプリケーションがすべてのDPI認識レベルで動作することを確認する必要があります。

次のマニフェストは、Windows 10 1607+ではモニターごとのDPI認識バージョン2を有効にし、Windows7以降ではシステムDPI認識を有効にします。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Assembly manifestVersion="1.0" xmlns="urn:schemas-Microsoft-com:asm.v1" xmlns:asmv3="urn:schemas-Microsoft-com:asm.v3">
    <assemblyIdentity type="win32" name="MyApplication" version="1.0.0.0" processorArchitecture="AMD64"/>

    <asmv3:application>
        <asmv3:windowsSettings>
            <dpiAware xmlns="http://schemas.Microsoft.com/SMI/2005/WindowsSettings">true/pm</dpiAware> <!-- fallback for Windows 7 and 8 -->
            <dpiAwareness xmlns="http://schemas.Microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness> <!-- adding v1 as fallback would result in v2 not being applied to dialogs on capable systems -->
            <gdiScaling xmlns="http://schemas.Microsoft.com/SMI/2017/WindowsSettings">true</gdiScaling> <!-- enables GDI DPI scaling -->
        </asmv3:windowsSettings>
    </asmv3:application>
</Assembly>

DPI認識を無効にするには、DPI認識を未指定のままにするか(デフォルトは非認識)、dpiAwarefalseとして指定します。

また、Windows 101607で追加されたgdiScalingプロパティにも注意してください。これにより、自動GDIスケーリングがtrueに設定されている場合に有効になります。アプリケーションでGDI物を描くため。


参照:
Windows 10 1607以降の高DPIスケーリング
DPI対応アプリケーションの作成
アプリケーションマニフェスト

9
tambre