none
Rilevamento risoluzione TV Samsung errata RRS feed

  • Discussione generale

  • Ciao a tutti,

    torno a parlare di gestione multi schermo. Usando il comando "Screen.AllScreens(N).Bounds" ho rilevato errori nel rilevamento della risoluzione di un TV Samsung collegato alla porta HDMI del portatile. In pratica se imposto una particolare risoluzione tramite pannello di controllo quel comando mi dà una risoluzione diversa.

    Per documentare questa anomalia ho creato un form a cui ho aggiunto questo codice:

    Public Class Form1
    
        Dim RichTextBox1 As New RichTextBox
    
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
            'Imposta le proprietà della RichTextBox1 e la aggiunge al form
            RichTextBox1.Dock = DockStyle.Fill
            RichTextBox1.ReadOnly = True
            RichTextBox1.DetectUrls = False
            RichTextBox1.SelectionBullet = True
            Me.Controls.Add(RichTextBox1)
    
            'Attiva il timer, il quale si occupa di rilevare la risoulzione
            'degli schermi e scriverla nella RichTextBox1
            Timer1.Interval = 1000
            Timer1.Enabled = True
    
        End Sub
    
        Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
            Try
    
                'Svuota la RichTextBox1
                RichTextBox1.Text = Nothing
    
                If Screen.AllScreens.Count > 0 Then
    
                    Dim Schermo As Screen
                    Dim Nome As String
                    Dim Larghezza As String
                    Dim Altezza As String
    
                    For Each Schermo In Screen.AllScreens
    
                        'Rileva i dati dello schermo
                        Nome = Schermo.DeviceName
                        Larghezza = Schermo.Bounds.Width
                        Altezza = Schermo.Bounds.Height
    
                        'Se la RichTextBox1 non è vuota va a capo
                        If Not RichTextBox1.Text = Nothing Then RichTextBox1.Text &= Chr(13)
    
                        'Aggiunge i dati dello schermo alla RichTextBox1
                        RichTextBox1.Text &= Nome & ": " & Larghezza & "x" & Altezza
    
                    Next
    
                End If
    
            Catch ex As Exception
    
                Timer1.Enabled = False
    
                MessageBox.Show("Si è verificato un errore: " & ex.Message & Chr(13) _
                                & "L'aggiornamento dei dati è stato interrotto", "Errore",
                                MessageBoxButtons.OK, MessageBoxIcon.Error)
    
            End Try
        End Sub
    
    End Class

    Ho quindi stilato una lista che confronta la risoluzione impostata nel pannello di controllo e quella rilavata dal comando "Screen.AllScreens(N).Bounds":

    • Impostata \ Rilevata
    • 640x480 \ 640x480
    • 720x480 \ 720x480
    • 720x576 \ 720x576
    • 800x600 \ 800x600
    • 1024x768 \ 1024x768
    • 1152x864 \ 1152x864
    • 1280x600 \ 1280x600
    • 1280x720 \ 1280x720
    • 1280x768 \ 1280x768
    • 1280x800 \ 1280x800
    • 1280x960 \ 1024x768
    • 1280x1024 \ 1024x819
    • 1360x768 \ 1360x768
    • 1366x768 \ 1366x768
    • 1400x1050 \ 1120x840
    • 1440x480 \ 1440x480
    • 1440x576 \ 1440x576
    • 1440x900 \ 1152x720
    • 1600x900 \ 1280x720
    • 1680x1050 \ 1344x840
    • 1920x1080 \ 1280x720

    Si può notare che tutte le risoluzioni con altezza pari o maggiore di 900 vengono rilevate male. Questo non accade con un altra TV (più vecchia) della Sony. Sottolineo che non rilevo nessun altro problema nella comunicazione notebook - TV Samsung. Questa TV LED ce l'ho già da un po' e la uso abbastanza spesso collegata al portatile.

    A questo punto credo sia molto probabile che una qualsiasi applicazione che si serva del comando "Screen.AllScreens(N).Bounds" possa incontrare problemi se viene usata con determinati schermi.

    C'è un altro modo per rilevare la risoluzione degli schermi che si accordi con quanto dice il pannello di controllo?

    Ho provato con WMI, di cui si parlava in quest'altro post, ma la classi Win32_DesktopMonitorWin32_PnPEntity non mi danno informazioni sulla risoluzione impostata al momento. A dir la verità la prima mi restituisce solo informazioni relative allo schermo principale, ovvero quello integrato, e comunque queste informazioni non includono la risoluzione attuale.





    giovedì 29 gennaio 2015 19:22

Tutte le risposte

  • Forse ho trovato da cosa dipende il problema, ma non so come risolvere. Cercando in giro per il web ho trovato questa discussione in cui il problema viene attribuito a una differenza di DPI tra il monitor primario e gli altri. In effetti ho constatato che modificando l'ingrandimento in Pannello di controllo\Aspetto e personalizzazione\Schermo il problema scompare. Nello specifico io avevo l'ingrandimento su "Grande". Riportandolo a "Piccolo" il comando "Screen.AllScreens(N).Bounds" mi restituisce valori corretti. Detto questo la domanda rimane: come faccio a sapere qual'è la risoluzione corretta, ovvero quella impostata in Pannello di controllo\Aspetto e personalizzazione\Schermo\Risoluzione dello schermo a prescindere da com'è messo il DPI?
    giovedì 29 gennaio 2015 20:28