énumération PROCESS_DPI_AWARENESS (shellscalingapi.h)

Identifie les valeurs de reconnaissance des points par pouce (ppp). La reconnaissance ppp indique la quantité de travail de mise à l’échelle qu’une application effectue pour ppp par rapport à la quantité effectuée par le système.

Les utilisateurs ont la possibilité de définir le facteur d’échelle PPP sur leurs affichages indépendamment les uns des autres. Certaines applications héritées ne sont pas en mesure d’ajuster leur mise à l’échelle pour plusieurs paramètres PPP. Pour permettre aux utilisateurs d’utiliser ces applications sans contenu trop grand ou trop petit sur les écrans, Windows peut appliquer la virtualisation PPP à une application, ce qui entraîne sa mise à l’échelle automatiquement par le système pour correspondre à la résolution de l’affichage actuel. La valeur PROCESS_DPI_AWARENESS indique le niveau de mise à l’échelle géré par votre application et la quantité fournie par Windows. Gardez à l’esprit que les applications mises à l’échelle par le système peuvent apparaître floues et lisent des données virtualisées sur le moniteur pour maintenir la compatibilité.

Syntax

typedef enum PROCESS_DPI_AWARENESS {
  PROCESS_DPI_UNAWARE = 0,
  PROCESS_SYSTEM_DPI_AWARE = 1,
  PROCESS_PER_MONITOR_DPI_AWARE = 2
} ;

Constantes

 
PROCESS_DPI_UNAWARE
Valeur : 0
Ppp non pris en compte. Cette application n’est pas mise à l’échelle pour les modifications PPP et est toujours supposée avoir un facteur d’échelle de 100 % (96 PPP). Il sera automatiquement mis à l’échelle par le système sur n’importe quel autre paramètre PPP.
PROCESS_SYSTEM_DPI_AWARE
Valeur : 1
Prise en charge de la résolution du système. Cette application n’est pas mise à l’échelle pour les modifications ppp. Il interroge l’ppp une fois et utilise cette valeur pendant la durée de vie de l’application. Si la PPP change, l’application ne s’ajuste pas à la nouvelle valeur PPP. Elle est automatiquement mise à l’échelle par le système lorsque la pppe change de la valeur système.
PROCESS_PER_MONITOR_DPI_AWARE
Valeur : 2
Prise en charge de la résolution par moniteur. Cette application recherche l’ppp lors de sa création et ajuste le facteur d’échelle chaque fois que le PPP change. Ces applications ne sont pas automatiquement mises à l’échelle par le système.

Remarques

Important  

Les versions précédentes de Windows vous obligeait à définir la reconnaissance PPP pour l’ensemble de l’application. Désormais, la prise de conscience PPP est liée à des threads, des processus ou des fenêtres individuels. Cela signifie que la reconnaissance PPP peut changer pendant l’exécution de l’application et que plusieurs fenêtres peuvent avoir leurs propres valeurs de reconnaissance ppp indépendantes. Consultez DPI_AWARENESS pour plus d’informations sur le fonctionnement actuel de la sensibilisation aux ppp. Les recommandations ci-dessous concernant la définition de la reconnaissance PPP dans le manifeste de l’application sont toujours prises en charge, mais la recommandation actuelle est d’utiliser le DPI_AWARENESS_CONTEXT.

 
La reconnaissance PPP d’une application doit être définie via le manifeste de l’application afin qu’elle soit déterminée avant toute action qui dépend de la résolution du système. Vous pouvez également définir la reconnaissance ppp à l’aide de SetProcessDpiAwareness, mais si vous le faites, vous devez veiller à la définir avant d’effectuer des actions dépendantes du ppp système. Une fois que vous avez défini la prise en charge ppp d’un processus, il ne peut pas être modifié.
Conseil  

Si votre application est PROCESS_DPI_UNAWARE, il n’est pas nécessaire de définir une valeur dans le manifeste de l’application. PROCESS_DPI_UNAWARE est la valeur par défaut pour les applications, sauf si une autre valeur est spécifiée.

 
PROCESS_DPI_UNAWARE et les applications PROCESS_SYSTEM_DPI_AWARE n’ont pas besoin de répondre à WM_DPICHANGED et ne sont pas censées gérer les modifications dans ppp. Le système met automatiquement à l’échelle ces types d’applications en fonction des besoins lorsque la pppe change. PROCESS_PER_MONITOR_DPI_AWARE applications sont responsables de la reconnaissance et de la réponse aux changements dans ppp, signalés par WM_DPICHANGED. Celles-ci ne seront pas mises à l’échelle par le système. Si une application de ce type ne redimensionne pas la fenêtre et son contenu, il semble qu’elle augmente ou diminue en fonction de la ppp relative qui change à mesure que la fenêtre est déplacée d’un affichage à l’autre avec un paramètre PPP différent.
Conseil  

Dans les versions précédentes de Windows, il n’existait aucun paramètre pour PROCESS_PER_MONITOR_DPI_AWARE. Les applications n’étaient pas au courant ou étaient au courant de la résolution. Les applications héritées qui étaient classées comme prenant en charge ppp avant Windows 8.1 sont considérées comme ayant un paramètre PROCESS_DPI_AWARENESS de PROCESS_SYSTEM_DPI_AWARE dans les versions actuelles de Windows.

 
Pour comprendre l’importance et l’impact des différentes valeurs de reconnaissance PPP, envisagez un utilisateur qui a trois affichages : A, B et C. L’affichage A est défini sur un facteur de mise à l’échelle de 100 % (96 PPP), l’affichage B est défini sur un facteur de mise à l’échelle de 200 % (192 PPP) et l’affichage C sur un facteur de mise à l’échelle de 300 % (288 PPP). L’ppp système est défini sur 200 %.

Une application PROCESS_DPI_UNAWARE utilise toujours un facteur de mise à l’échelle de 100 % (96 PPP). Dans ce scénario, une fenêtre PROCESS_DPI_UNAWARE est créée avec une taille de 500 par 500. Sur l’affichage A, il s’affiche en mode natif sans mise à l’échelle. Sur les écrans B et C, il sera automatiquement mis à l’échelle par le système d’un facteur de 2 et 3 respectivement. Cela est dû au fait qu’un PROCESS_DPI_UNAWARE suppose toujours un PPP de 96, et le système en tient compte. Si l’application interroge la taille de la fenêtre, elle obtient toujours une valeur de 500 par 500, quel que soit l’affichage dans lequel elle se trouve. Si cette application devait demander la résolution de l’un des trois moniteurs, elle recevra 96.

Considérez maintenant une application PROCESS_SYSTEM_DPI_AWARE. N’oubliez pas que dans l’exemple, la résolution du système est de 200 % ou 192 PPP. Cela signifie que toutes les fenêtres créées par cette application s’affichent en mode natif sur l’affichage B. Si la fenêtre se déplace pour afficher A, elle est automatiquement réduite d’un facteur de 2. Cela est dû au fait qu’une application PROCESS_SYSTEM_DPI_AWARE dans ce scénario suppose que la ppp sera toujours 192. Il interroge l’ppp au démarrage, puis ne le modifie jamais. Le système prend en charge cela en effectuant automatiquement un scale-down lors du déplacement vers l’affichage A. De même, si la fenêtre se déplace pour afficher C, le système est automatiquement mis à l’échelle d’un facteur de 1,5. Si l’application interroge la taille de la fenêtre, elle obtient toujours la même valeur, similaire à PROCESS_DPI_UNAWARE. S’il demande l’PPP de l’un des trois moniteurs, il recevra 192.

Contrairement aux autres valeurs de sensibilisation, PROCESS_PER_MONITOR_DPI_AWARE doivent s’adapter à l’affichage sur lequel il est activé. Cela signifie qu’il est toujours rendu en mode natif et n’est jamais mis à l’échelle par le système. Il incombe à l’application d’ajuster le facteur d’échelle lors de la réception du message WM_DPICHANGED . Une partie de ce message inclut un rect suggéré pour la fenêtre. Cette suggestion est la fenêtre actuelle mise à l’échelle de l’ancienne valeur PPP à la nouvelle valeur PPP. Par exemple, une fenêtre qui est de 500 par 500 sur l’affichage A et déplacée vers l’affichage B recevra un rect de fenêtre suggéré qui est de 1000 par 1000. Si cette même fenêtre est déplacée pour afficher C, la fenêtre suggérée rect attachée à WM_DPICHANGED sera 1500 par 1500. En outre, lorsque cette application interroge la taille de la fenêtre, elle obtient toujours la valeur native réelle. De même, s’il demande le DPI de l’un des trois moniteurs, il recevra respectivement 96, 192 et 288.

En raison de la virtualisation PPP, si une application interroge une autre application avec un niveau de sensibilisation différent pour les informations dépendantes de ppp, le système met automatiquement à l’échelle les valeurs pour correspondre au niveau de sensibilisation de l’appelant. Par exemple, si vous appelez GetWindowRect et passez une fenêtre créée par une autre application. En utilisant la situation décrite ci-dessus, supposons qu’une application PROCESS_DPI_UNAWARE a créé une fenêtre de 500 par 500 sur l’affichage C. Si vous interrogez la rect de fenêtre à partir d’une autre application, la taille du rect varie en fonction de la prise en charge ppp de votre application.

PROCESS_DPI_UNAWARE Vous obtiendrez un rect de 500 par 500, car le système suppose un PPP de 96 et met automatiquement à l’échelle la rect réelle d’un facteur de 3.
PROCESS_SYSTEM_DPI_AWARE Vous obtiendrez une valeur de 1 000 par 1000 rect, car le système suppose un PPP de 192 et met automatiquement à l’échelle la rect réelle d’un facteur de 3/2.
PROCESS_PER_MONITOR_DPI_AWARE Vous obtiendrez un rect de 1500 par 1500, car le système utilisera la résolution réelle de l’affichage et n’effectuera aucune mise à l’échelle en arrière-plan.
 

Exemples

Cet extrait de code montre comment définir une valeur de PROCESS_SYSTEM_DPI_AWARE dans le manifeste de votre application.

<dpiAware>true</dpiAware>

Cet extrait de code montre comment définir une valeur de PROCESS_PER_MONITOR_DPI_AWARE dans le manifeste de votre application.

<dpiAware>true/PM</dpiAware>

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 8.1 [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2012 R2 [applications de bureau uniquement]
En-tête shellscalingapi.h

Voir aussi

DPI_AWARENESS