Partager via


Définition de la reconnaissance PPP par défaut pour un processus

Les applications de bureau sur Windows peuvent s’exécuter dans différents modes de sensibilisation PPP. Ces modes permettent un comportement de mise à l’échelle PPP différent et peuvent utiliser différents espaces de coordonnées. Pour plus d’informations sur la prise en charge des ppp, consultez Développement d’applications de bureau haute résolution sur Windows. Il est important de définir explicitement le mode de sensibilisation PPP par défaut de votre processus afin d’éviter tout comportement inattendu.

Il existe deux méthodes main pour spécifier la prise en charge ppp par défaut d’un processus :

1) via un paramètre de manifeste d’application

2) par programmation via un appel d’API

Nous vous recommandons de spécifier la reconnaissance ppp du processus par défaut via un paramètre de manifeste. Bien que la spécification de la valeur par défaut via l’API soit prise en charge, elle n’est pas recommandée.

Définition de la reconnaissance par défaut avec le manifeste de l’application

Il existe deux paramètres de manifeste qui vous permettent de spécifier le mode de sensibilisation ppp par défaut du processus : <dpiAwareness> et <dpiAware>. <dpiAware> a été introduit dans Windows Vista et permet uniquement à votre processus par défaut d’être défini sur la reconnaissance du système. <dpiAwareness> a été introduit dans Windows 10, version 1607 et vous permet de spécifier une liste triée des modes de reconnaissance ppp par défaut du processus. Cela vous permet de définir des modes de reconnaissance PPP de sauvegarde, qui seront utilisés si votre application est exécutée sur une version de Windows qui ne peut pas prendre en charge le premier mode de sensibilisation spécifié. Sur les versions antérieures de Windows, la balise dpiAwareness la> plus récente <est ignorée. Cela signifie que vous pouvez utiliser ces deux paramètres de manifeste pour activer un scénario où la valeur par défaut de votre processus peut être la connaissance du système sur une version antérieure de Windows tout en étant Per-Monitor sur les versions supérieures à Windows 10, version 1607. Sur Windows 10, la version 1607 et la version 1607, le <paramètre dpiAware> est ignoré si l’élément <dpiAwareness> est présent.

Le tableau ci-dessous montre comment spécifier différents modes de sensibilisation ppp par défaut de processus à l’aide des deux paramètres de manifeste :

Traiter le mode de reconnaissance ppp par défaut <paramètre dpiAware> <paramètre dpiAwareness> (Windows 10, version 1607 et ultérieure)
Ignorer

N/A (aucun paramètre dpiAware dans le manifeste)

or

<dpiAware>false</dpiAware>

<dpiAwareness>non conscient</dpiAwareness>
Prenant en compte le système <dpiAware>true</dpiAware> <dpiAwareness>system</dpiAwareness>
Par moniteur <dpiAware>true/pm<dpiAware> <dpiAwareness>PerMonitor</dpiAwareness>
Par moniteur V2 Non pris en charge <dpiAwareness>PerMonitorV2</dpiAwareness>

 

L’exemple ci-dessous montre à la fois les <paramètres dpiAwareness> et <dpiAware> utilisés dans le même fichier manifeste pour configurer le comportement de sensibilisation aux ppp par défaut du processus pour différentes versions de Windows.

<?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">
  <asmv3:application>
    <asmv3:windowsSettings>
      <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
      <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness>
    </asmv3:windowsSettings>
  </asmv3:application>
</assembly>

Définition de la reconnaissance par défaut par programmation

Bien qu’il ne soit pas recommandé, il est possible de définir la reconnaissance PPP par défaut par programme. Une fois qu’une fenêtre (un HWND) a été créée dans votre processus, la modification du mode de reconnaissance ppp n’est plus prise en charge. Si vous définissez le mode de sensibilisation ppp par défaut du processus par programmation, vous devez appeler l’API correspondante avant que des HWND aient été créés.

Il existe plusieurs API qui vous permettent de spécifier la reconnaissance PPP par défaut pour votre processus. L’API recommandée actuelle est SetProcessDpiAwarenessContext, car les API plus anciennes offrent moins de fonctionnalités.

 

API Version minimale de Windows PPP non pris en charge Prise en charge des PPP système Prise en charge des PPP par moniteur
SetProcessDPIAware Windows Vista N/A SetProcessDPIAware() N/A
SetProcessDpiAwareness Windows 8.1 SetProcessDpiAwareness(PROCESS_DPI_UNAWARE) SetProcessDpiAwareness(PROCESS_SYSTEM_DPI_AWARE) SetProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE)
SetProcessDpiAwarenessContext Windows 10, version 1607 SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_UNAWARE) SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_SYSTEM_AWARE)

SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE)

SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2)

 

Process-default vs. Thread default

Ce document fait référence à la définition de la reconnaissance PPP par défaut pour votre processus. Cela est dû au fait que Windows 10 introduit la prise en charge de l’exécution de plusieurs modes de sensibilisation PPP au sein d’un seul processus (avant Windows 10, l’ensemble du processus devait se conformer à un seul mode de sensibilisation PPP). La prise en charge de l’exécution de plusieurs modes de sensibilisation PPP dans un processus est appelée « mise à l’échelle ppp en mode mixte ». Lorsque vous utilisez la mise à l’échelle ppp en mode mixte dans votre processus, chaque fenêtre de niveau supérieur peut s’exécuter dans un mode de sensibilisation PPP qui peut être différent de celui du processus par défaut. Sauf indication explicite, chaque thread est défini par défaut sur le processus par défaut lors de sa création. Pour plus d’informations sur la mise à l’échelle ppp en mode mixte, consultez l’article Mise à l’échelle ppp en mode mixte .