Problemi con PrimaryScreen.Size

Sono stato bene con Screen.PrimaryScreen.Bounds.Size per un po ‘di tempo, ma sul mio computer Windows7 collegato al mio televisore su grande schermo mi sta dando valori errati.

Ho letto altrove per provare SystemInformation.PrimaryMonitorSize ma che fornisce gli stessi valori.

Quando faccio clic con il pulsante destro del mouse sul desktop per ottenere la risoluzione dello schermo, si dice 1920x1080 . I due precedenti mi danno 1280x720 .

Ho anche provato le versioni di WPF:

 var w = System.Windows.SystemParameters.PrimaryScreenWidth; var h = System.Windows.SystemParameters.PrimaryScreenHeight; MessageBox.Show(new Size((int)w, (int)h).ToString()); 

Le dimensioni del display sono state modificate tramite (fare clic con il pulsante destro del mouse sul desktop) Personalize > Desktop Opzioni del Personalize > Desktop per essere al 150% (poiché lo schermo è 60 “e ti siedi un po ‘lontano).

Come rilevare questo in modo che il valore restituito da quanto sopra può essere regolato?

Nota : ho scoperto come aggirare questo problema con un eseguibile con il tasto destro del mouse e regolare la compatibilità per disabilitare la virtualizzazione DPI, ma ho ancora bisogno di una soluzione programmatica, quindi non devo avere la regolazione da parte dell’utente: Vedi – http: //msdn.microsoft.com/en-us/library/dd464660(VS.85).aspx#dpi_virtualization

Potrebbe essere la tua impostazione Dpi in Windows impostato al di sopra del 100%

Prova a usare questo metodo, questo ridimensiona la risoluzione alle impostazioni del sistema Dpi corrente

WinForms:

 private Size GetDpiSafeResolution() { using (Graphics graphics = this.CreateGraphics()) { return new Size((Screen.PrimaryScreen.Bounds.Width * (int)graphics.DpiX) / 96 , (Screen.PrimaryScreen.Bounds.Height * (int)graphics.DpiY) / 96); } } 

WPF:

 private Size GetDpiSafeResolution() { PresentationSource _presentationSource = PresentationSource.FromVisual(Application.Current.MainWindow); Matrix matix = _presentationSource.CompositionTarget.TransformToDevice; return new Size(SystemParameters.PrimaryScreenHeight * matix.M11, SystemParameters.PrimaryScreenWidth * matix.M22); } 

Nota: assicurati che la tua MainWindow sia caricata prima di eseguire questo codice

Non credo che questa sia una domanda doppia, ma la risposta è la stessa di un’altra discussione: https://stackoverflow.com/a/13228495/353147 Poiché la domanda non riguarda i caratteri sfocati ma perché Screen.PrimaryScreen. Bounds.Size restituisce informazioni errate. Potrebbe aiutare gli altri.

Ho eseguito un messaggio di errore, che mscorlib ha generato un errore nullo. Da questo thread http://forums.asp.net/t/1653876.aspx/1 sono stato in grado di scoprire che la deselezione “Abilita impostazioni di sicurezza ClickOnce” l’ha corretta. Sembra un trucco, ma funziona.