Impostazione della consapevolezza DPI predefinita per un processo

Le applicazioni desktop in Windows possono essere eseguite in modalità di riconoscimento DPI diverse. Queste modalità consentono un comportamento di ridimensionamento DPI diverso e possono usare spazi di coordinate diversi. Per altre informazioni sulla consapevolezza dpi, vedere Sviluppo di applicazioni desktop DPI elevate in Windows. È importante impostare in modo esplicito la modalità di riconoscimento DPI predefinita del processo in modo da evitare comportamenti imprevisti.

Esistono due metodi principali per specificare la consapevolezza dpi predefinita di un processo:

1) tramite un'impostazione del manifesto dell'applicazione

2) a livello di codice tramite una chiamata API

È consigliabile specificare il riconoscimento DPI del processo predefinito tramite un'impostazione del manifesto. Se si specifica l'impostazione predefinita tramite l'API è supportata, non è consigliabile.

Impostazione della consapevolezza predefinita con il manifesto dell'applicazione

Esistono due impostazioni del manifesto che consentono di specificare la modalità di riconoscimento DPI predefinita del processo: <dpiAwareness> e <dpiAware>. <DpiAware> è stato introdotto in Windows Vista e consente di impostare l'impostazione predefinita del processo solo sulla consapevolezza del sistema. <dpiAwareness> è stato introdotto in Windows 10 versione 1607 e consente di specificare un elenco ordinato di modalità di riconoscimento DPI predefinite del processo. In questo modo è possibile impostare le modalità di riconoscimento DPI di backup, che verranno usate se l'applicazione viene eseguita in una versione di Windows in grado di supportare la prima modalità di riconoscimento specificata. Nelle versioni precedenti di Windows, il tag dpiAwareness> più recente <verrà ignorato. Ciò significa che è possibile usare entrambe queste impostazioni del manifesto per abilitare uno scenario in cui l'impostazione predefinita del processo potrebbe essere di conoscenza del sistema nella versione precedente di Windows mentre è Per-Monitor nelle versioni superiori a Windows 10, versione 1607. In Windows 10 versione 1607 e attiva l'impostazione <dpiAware> viene ignorata se è presente l'elemento <dpiAwareness>.

La tabella seguente illustra come specificare diverse modalità di riconoscimento DPI predefinite del processo usando le due impostazioni del manifesto:

Elaborare la modalità di riconoscimento DPI predefinita <Impostazione dpiAware> <impostazione dpiAwareness> (Windows 10, versione 1607 e successive)
Ignari

N/D (nessuna impostazione dpiAware nel manifesto)

oppure

<dpiAware false</dpiAware>>

<dpiAwareness unwareness></dpiAwareness>
Riconoscimento del sistema <dpiAware true</dpiAware>> <dpiAwareness>system</dpiAwareness>
Per monitoraggio <dpiAware>true/pm<dpiAware> <dpiAwareness>PerMonitor</dpiAwareness>
Per Monitor V2 Non supportato <dpiAwareness>PerMonitorV2</dpiAwareness>

 

L'esempio seguente mostra sia dpiAwareness><che le <impostazioni dpiAware> usate all'interno dello stesso file manifesto per configurare il comportamento di riconoscimento DPI predefinito del processo per diverse versioni di 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>

Impostazione della consapevolezza predefinita a livello di codice

Anche se non è consigliabile, è possibile impostare la consapevolezza dpi predefinita a livello di codice. Dopo aver creato una finestra (HWND) nel processo, la modifica della modalità di riconoscimento DPI non è più supportata. Se si imposta la modalità di riconoscimento DPI predefinita del processo a livello di codice, è necessario chiamare l'API corrispondente prima di creare eventuali HWND.

Sono disponibili più API che consentono di specificare la consapevolezza DPI predefinita per il processo. L'API consigliata corrente è SetProcessDpiAwarenessContext, perché le API precedenti offrono meno funzionalità.

 

API Versione minima di Windows DPI non a conoscenza Riconoscimento DPI del sistema Riconoscimento DPI per monitoraggio
SetProcessDPIAware Windows Vista N/D SetProcessDPIAware() N/D
SetProcessDpiAwareness Windows 8.1 SetProcessDpiAwareness(PROCESS_DPI_UNAWARE) SetProcessDpiAwareness(PROCESS_SYSTEM_DPI_AWARE) SetProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE)
SetProcessDpiAwarenessContext Windows 10 versione 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)

 

Valore predefinito del processo e thread predefinito

Questo documento fa riferimento all'impostazione del riconoscimento DPI predefinito per il processo. Ciò è dovuto al fatto che Windows 10 introdotto il supporto per l'esecuzione di più di una modalità di consapevolezza DPI all'interno di un singolo processo (prima di Windows 10, l'intero processo doveva essere conforme a una singola modalità di riconoscimento DPI). Il supporto per l'esecuzione di più modalità di riconoscimento DPI all'interno di un processo viene definito "ridimensionamento DPI in modalità mista". Quando si usa il ridimensionamento DPI in modalità mista all'interno del processo, ogni finestra di primo livello può essere eseguita in modalità di riconoscimento DPI che può essere diversa da quella predefinita del processo. A meno che non venga specificato in modo esplicito, per impostazione predefinita ogni thread verrà impostato sul valore predefinito del processo al momento della creazione. Per altre informazioni sul ridimensionamento DPI in modalità mista, vedere l'articolo Ridimensionamento DPI in modalità mista .