Como posso informar o Windows 8.1 de que meu aplicativo Delphi deseja oferecer suporte ao DPI por monitor?

Eu tentei fazer com que o Windows 8.1 reconhecesse um aplicativo Delphi XE6 (um programa de demonstração) que eu estava tentando criar e reconheça que meu aplicativo é compatível com DPI por monitor, puramente pela técnica Manifest. O Delphi XE6 (e todas as outras versões similarmente atualizadas do Delphi) facilitam a adição de um manifesto, dentro das Opções do Projeto, e eu fiz isso.

Este é o conteúdo manifesto que eu determinei usando os recursos do MSDN. Eu suspeito que poderia estar um pouco incorreto.

Se você quiser experimentar esse manifesto, crie um aplicativo VCL vazio, use este conteúdo como manifesto e adicione o código (o código está atualmente anexado à minha resposta a esta pergunta).

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" >
  <!-- Per Monitor DPI Awareness in Windows 8.1 uses asmv3:application + asmv3:windowsSettings -->
  <asmv3:application>
    <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
      <dpiAware>True</dpiAware>
    </asmv3:windowsSettings>
  </asmv3:application>

  <!-- Dear Microsoft, Don't Lie to Me About What Version of Windows I am On -->
  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>
      <!-- Windows Vista and Windows Server 2008 -->
      <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
      <!-- Windows 7 and Windows Server 2008 R2 -->
      <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
      <!-- Windows 8 and Windows Server 2012 -->
      <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
      <!-- Windows 8.1 and Windows Server 2012 R2 -->
      <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
    </application>
  </compatibility>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
        type="win32"
        name="Microsoft.Windows.Common-Controls"
        version="6.0.0.0"
        processorArchitecture="*"
        publicKeyToken="6595b64144ccf1df"
        language="*"
        />
    </dependentAssembly>
  </dependency>
</assembly>

Alguém conseguiu fazer isso funcionar? O que eu acho é que o exposto acima não é reconhecido. Se eu ligarSetProcessDPIAwareness(Process_Per_Monitor_DPI_Aware) primeiro, depois chameGetProcessDPIAwareness(hProc,Awareness), Volto o necessárioAwareness = Process_Per_Monitor_DPI_Aware, mas li que existem desvantagens em potencial nessa abordagem e, portanto, eu preferiria uma abordagem de Manifest-only de trabalho.

Se eu ligarGetProcessDPIAwareness(hProc,Awareness), Recebo de volta `Awareness = Process_DPI_Unaware '.

Minha outra preocupação é que, nas fontes do MSDN, eles especifiquem a adição de um manifesto ADICIONAL. Visto que estou usando a capacidade do IDE do Delphi XE6 para vincular ONE e ONLY ONE manifesto em meu aplicativo; Eu nunca notei que adicionar qualquer manifesto adicional em vez de ter apenas um já foi um problema, exceto que talvez o sistema de gerenciamento de manifestos no Visual Studio 2010 tenha sido manco, e é por isso que a dica existia e, portanto, não tem relevância para outros IDEs. /Línguas.

No Visual Studio 2013, há uma caixa de seleção dentro das opções do projeto, mas eu não tenho o Visual Studio 2013, portanto não posso examinar um manifesto.

atualizar:

Aqui está outra chance de um manifesto:

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" >
  <asmv3:application>
    <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
      <dpiAware>true</dpiAware>
    </asmv3:windowsSettings>
  </asmv3:application>
</assembly>

O mini manifesto acima altera o comportamento do aplicativo, mas não exatamente do jeito que eu queria. Com o pequeno manifesto acima, o nível de reconhecimento de DPI OLD do Windows 8.0 / Windows 7 / Vista é detectado.

atualização 2:

Obrigado Remy pelas idéias. Curiosamente, o seguinte parece ser válido o suficiente para permitir o lançamento de um aplicativo. No entanto, a mistura da sintaxe SMI / 2005 com a anterior causou um erro de inicialização lado a lado. Você pode ver que a Microsoft tem agitado bastante seus manifestos. Observe que o seguinte na verdade não resolve meu problema, mas fornece mais um "formulário base potencial" que pode estar perto da solução real:

 <assembly xmlns="urn:schemas-microsoft-com:asm.v3" manifestVersion="1.0" >
  <application>
    <windowsSettings xmlns="http://schemas.microsoft.com/SMI/2011/WindowsSettings">
      <dpiAware>true</dpiAware>
    </windowsSettings>
  </application>
</assembly>

atualização 3:

CÓDIGO ALERTA VERMELHO! NÃO USE o seguinte flag OS COMPATIBILITY em nenhum aplicativo Delphi VCL:<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>. A Microsoft quebrou o COMPORTAMENTO DE CAPTURA DO MOUSE, PINTURA DA JANELA QUEBRADA de maneiras horríveis que eu nem consegui adivinhar. Ativar esse sinalizador causou bugs muito sutis no meu aplicativo, incluindo problemas de pintura, incapacidade de clicar nos controles (as mensagens do mouse pressionadas não atingem os controles, devido à perda de captura do mouse) e muitos outros problemas.

questionAnswers(3)

yourAnswerToTheQuestion