Come forzare il ridimensionamento ad alto dpi?


27

Come posso forzare il ridimensionamento di un'applicazione ad alta risoluzione?

  • Fai finta che ci sia un'applicazione, che gli sviluppatori l'hanno manifestata come consapevole di alti dpi, quando in realtà non lo è. Come posso forzare il ridimensionamento dpi?

  • Fai finta che ci sia un'applicazione che Microsoft ha applicato lo " HighDpiAware" spessore di compatibilità, quando l'applicazione non lo è. Come posso forzare il ridimensionamento dpi?

Come posso forzare Windows ad applicare il ridimensionamento dpi a un'applicazione?


Modifica: che cos'è il ridimensionamento ad alto dpi?

Non tutti gli utenti eseguono Windows a 96 dpi. Non tutti i pulsanti dovrebbero essere 75x23 pixel, non tutte le barre degli strumenti sono alte 25 pixel e non ogni glifo treeview è 16x16. Se l'utente ha scelto una diversa impostazione dpi per Windows, è necessario ridimensionare tutto in modo appropriato.

Il problema è che quasi nessuno sviluppatore fa il proprio lavoro gestendo bene le impostazioni ad alto dpi. Nella migliore delle ipotesi, tutto rimarrà "della stessa dimensione", il che significa che ogni aspetto appare minuscolo . Nella peggiore delle ipotesi, le forme sono disposte in modo errato, con il testo tagliato e i controlli non visibili.

A partire da Windows Vista e sfruttando la potenza di Desktop Composition, Microsoft ha rinunciato agli sviluppatori a fare il loro lavoro e ora mentono all'applicazione. Dicono alle app che l'utente è in esecuzione a 96 dpi. Windows utilizza quindi la scheda video e Composizione desktop per ingrandire i moduli.

Pro: il contenuto del modulo avrà una buona dimensione leggibile.
Contro: tutto sarà leggermente sfocato.

Questa funzione di "ridimensionamento a dpi alti" funziona solo a discrezione dell'utente e richiede:

  • Windows Vista o più recente
  • Composizione desktop da abilitare
  • l'utente per disattivare "Usa ridimensionamento stile Windows XP"
  • l'utente non deve disabilitare il ridimensionamento per l'applicazione

Come sviluppatore, puoi disattivare il ridimensionamento ad alto dpi; se hai preso lo sforzo di scrivere correttamente la tua applicazione e sai che gestirai correttamente gli alti dpi. Esci da questo ridimensionamento aggiungendo una voce manifest al tuo eseguibile, dichiarando di essere "ad alta risoluzione dpi ".

L'argomento su come fare in modo che la tua applicazione rispetti le preferenze dell'utente (inclusi faccia del carattere, dimensione del carattere e impostazione dpi) è una domanda per stack overflow. Come è la sintassi per la voce manifest che dichiara la tua " consapevolezza ad alto dpi ".

Questa domanda, su superutente , è come ignorare uno sviluppatore che è andato avanti e ha aggiunto una voce manifest consapevole ad alto dpi, quando in realtà l'applicazione non è consapevole ad alto dpi. Hanno detto a Windows di disabilitare il ridimensionamento, ma in realtà non hanno testato l'applicazione. Esiste un software là fuori con una voce manifest "ad alta risoluzione dpi", e ora l'applicazione è inutilizzabile sotto "caratteri grandi" (ad esempio 120 dpi).


Sono interessato anche a questo. Abbiamo un'applicazione critica che non è a conoscenza di dpi ed è stata originariamente progettata per uno schermo 800x600. Windows non lo ridimensiona per impostazione predefinita e non fa alcuna differenza se stiamo usando XP, Vista o 7. Dato che il nostro personale trascorre la maggior parte del tempo in questa app 800x600, insistono nell'usare i loro monitor LCD da 20 " con una risoluzione di 800x600! Questo è un enorme spreco e la mancanza autoinflitta di pixel si mette in mezzo quando devono usare MS Office, IE8, ecc.
Miles Erickson

1
Fu solo con Windows Vista che Microsoft iniziò a sfruttare Desktop Composition (ciò che alcuni chiamano erroneamente Aero ) per utilizzare la scheda grafica per ridimensionare le applicazioni che non rinunciano espressamente al ridimensionamento. In XP non era presente il ridimensionamento e non si desidera ridimensionare in Vista 7. Si desidera che l'applicazione venga scritta correttamente. Cammina verso la macchina di uno sviluppatore, cambia la sua risoluzione su 1050 e imposta il dpi su 168. Tutto sarà lo stesso enorme ingrandito in modalità tard, tranne che l'app non si comporterà correttamente. Di 'loro che non riceveranno cibo o acqua fino a quando non verrà risolto.
Ian Boyd,

Non sempre abbiamo accesso agli sviluppatori che creano le app che utilizziamo. Se solo lo facessimo ...
Cilindrico,

Forms = forme?
jiggunjer,

Risposte:


5

Hmm. Il mio suggerimento sarebbe di modificare il manifest e rimuovere la dichiarazione errata. E non dimenticarti di infastidire lo sviluppatore, comunque puoi!

Modifica: si noti che dovrebbe essere possibile semplicemente posizionare il manifest vicino all'eseguibile, ad es. Per foo.exeposizionare il manifest foo.exe.manifest. Vedere l' articolo MSDN (consultare la sezione chiamata "Sintassi del nome file").


presumo che questo sia l'unico modo per andare. Il rovescio della medaglia: invalida la firma digitale dell'appliation.
Ian Boyd,

@Ian: sembra che non si deve mettere il manifesto in una risorsa.
SamB

3
In passato un .manifestfile aveva la precedenza sul manifest all'interno dell'eseguibile. Oggi qualsiasi manifest incorporato nell'eseguibile ha la precedenza su qualsiasi .manifestfile esterno . non ricordo quale service pack di XP lo abbia cambiato - penso che fosse SP2.
Ian Boyd,

8

Ho appena rilasciato una DLL che aggancia e reindirizza le chiamate a SetProcessDPIAware. Per quelle applicazioni che disabilitano il ridimensionamento DPI attraverso il codice, questa è una soluzione rapida e semplice (rispetto al patching binario).

DPIMangler: post di blog , codice sorgente .


6

Puoi ancora modificare il manifest, dovrai solo modificarlo nel file .EXE stesso. Cerca un editor di risorse con supporto manifest. Un esempio con supporto rudimentale è XN Resource Editor.) Basta trovare ed eliminare la riga che menziona HIGHDPIAWARE e salvare l'eseguibile.

Assicurati di fare una copia dell'eseguibile prima di modificarlo, però!


"L'aspetto negativo: annulla la firma digitale dell'appliation."
Ian Boyd,

0

Mi chiedo se ResizeEnable è quello che stai cercando?

http://www.digitallis.co.uk/pc/ResizeEnable/


No, le finestre sono già ridimensionabili. Il problema è quando il compositore compone la finestra per la visualizzazione. In questo momento non sta facendo nulla di speciale, in quanto l'applicazione ha detto che non ha bisogno di essere ridimensionata. Ma in realtà la finestra non ha bisogno di essere scalato.
Ian Boyd,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.