Recuperer RESOLUTIONS ECRAN

Signaler
Messages postés
3
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
12 août 2015
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
Bonjour,
BONJOUR PR TOUT LE MONDE
J AI REALISER UNE APPLICATION EN VB.NET ET POUR QU ELLE SOIT ADAPTEE AU DIFFÉRENT ECRAN .JE VEUX RECUPERER LA LISTE DES RESOLUTION DE L ORDINATEUR POUR LA MODIFIER EST CE QUE POSSIBLE ET MERCI D AVANCE

--

4 réponses

Messages postés
14788
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
1 mai 2021
155
Bonjour,

Pourquoi HURLER ?
Ensuite, on ne change pas la résolution de l'écran de l'utilisateur, même si cela est possible.
En général, l'utilisateur règle son écran en fonction de ses critères, donc, aucun programme n'a de raison de changer cela.

Il te faudra adapter ton programme à la résolution de l'écran et pas l'inverse.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
Bonjour,
Si tu n'as pas de réponse, c'est "peut-être" que ta question est imprécise.
Exemple : "LA LISTE DES RESOLUTION DE L ORDINATEUR" ===>>
- un ordinateur n'a pas de "résolutions"
- un écran :
----- a une résolution (que l'on peut déterminer, elle)
----- est construit pour en "accepter" plusieurs (dont la liste est alors fastidieuse à déterminer)

Je te conseille donc de reformuler ta question de manière à ce qu'aucun doute ne subsiste quant à ce que tu veux faire.

PS : cette partie :
"...POUR LA MODIFIER..."
m'inquiète !
Tu ne comptes tout de même pas, j'espère, modifier la configuration d'une machine pour qu'elle puisse "satisfaire" ton appli ? ===>> je fusillerais sans la moindre hésitation le créateur de toute appli qui toucherait à ma config. y compris si celle appli est supposée restituer la config originelle, car :
1) quid en cas d'interruption brutale (quelle qu'en puisse être la cause, y compris matérielle ...) ?
2) quid de l'affichage d'autres fenêtres éventuellement ouvertes ?
Ce serait là une plaisanterie inacceptable

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
Messages postés
32312
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
5 mai 2021
346
Bonjour,


pour lister les résolutions il existe : EnumDisplaySettings.

exemple:


Imports System.Runtime.InteropServices


Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim DevM As DEVMODE
        Dim intX As Integer = Screen.PrimaryScreen.Bounds.Width
        Dim intY As Integer = Screen.PrimaryScreen.Bounds.Height
        Dim currres As String

        DevM.dmDeviceName = New [String](New Char(32) {})
        DevM.dmFormName = New [String](New Char(32) {})
        DevM.dmSize = CShort(Marshal.SizeOf(GetType(DEVMODE)))

        Dim dMode = -1
        'While 0 <> 
        Do While EnumDisplaySettings(Nothing, dMode, DevM) = True
            'Dim lResult As Integer
            If DevM.dmPelsWidth > 640 Then


                If DevM.dmPelsHeight = intX And DevM.dmPelsWidth = intY Then
                    currres = "Monitor Resolution"
                Else
                    currres = ""
                End If

                Debug.Print(CStr(DevM.dmPelsWidth) & " X " & CStr(DevM.dmPelsHeight) & CStr(currres))
            End If
            dMode += 1
            'End While
        Loop
    End Sub




    Private Property X As DEVMODE

    Private Declare Function EnumDisplaySettings Lib "user32" Alias "EnumDisplaySettingsA" (ByVal lpszDeviceName As Integer, ByVal iModeNum As Integer, ByRef lpdmode As DEVMODE) As Boolean
    'Private Declare Function ChangeDisplaySettings Lib "user32" Alias "ChangeDisplaySettingsA" (ByRef DEVMODE As DEVMODE, ByVal flags As Integer) As Integer

    Const ENUM_CURRENT_SETTINGS As Integer = -1
    Const CDS_UPDATEREGISTRY As Integer = &H1
    Const CDS_TEST As Long = &H2

    Const CCDEVICENAME As Integer = 32
    Const CCFORMNAME As Integer = 32

    Const DISP_CHANGE_SUCCESSFUL As Integer = 0
    Const DISP_CHANGE_RESTART As Integer = 1
    Const DISP_CHANGE_FAILED As Integer = -1

    'Public Const dm_BITSPERPEL As Integer = &H40000
    'Public Const dm_PELSWIDTH As Integer = &H80000
    'Public Const dm_PELSHEIGHT As Integer = &H100000
    'Public Const dm_DISPLAYFLAGS As Integer = &H200000

    <StructLayout(LayoutKind.Sequential)> Public Structure DEVMODE
        <MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst:=CCDEVICENAME)> Public dmDeviceName As String
        Public dmSpecVersion As Short
        Public dmDriverVersion As Short
        Public dmSize As Short
        Public dmDriverExtra As Short
        Public dmFields As Integer

        Public dmOrientation As Short
        Public dmPaperSize As Short
        Public dmPaperLength As Short
        Public dmPaperWidth As Short

        Public dmScale As Short
        Public dmCopies As Short
        Public dmDefaultSource As Short
        Public dmPrintQuality As Short
        Public dmColor As Short
        Public dmDuplex As Short
        Public dmYResolution As Short
        Public dmTTOption As Short
        Public dmCollate As Short
        <MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst:=CCFORMNAME)> Public dmFormName As String
        Public dmUnusedPadding As Short
        Public dmBitsPerPel As Short
        Public dmPelsWidth As Integer
        Public dmPelsHeight As Integer

        Public dmDisplayFlags As Integer
        Public dmDisplayFrequency As Integer
    End Structure





End Class


Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
Ah ... voilà qui est sage (et que je demande depuis le début).
Merci, jordane45, pour cette invite faite/réitérée au demandeur.
Messages postés
32312
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
5 mai 2021
346
;-) non non.. c'est bien à toi que je faisais cette proposition.
Ton code en vb6 peut en intéresser certains une fois convertit en .net... mais l'ouverture d'une discussion pour proposer aux développeurs de te le convertir serait souhaitable.
Surtout que je comprend pas pourquoi tu veux utiliser autant de chose (en plus du EnumDisplaySettings ) et surtout comment tu veux les "inter-connecter".
A mon avis (je n'ai pas regarder ce que faisaitGetDeviceCaps ) tu cherches à Lister Les résolutions disponibles (celles proposées par EnumDisplaySettings) ET celles "compatibles" avec le matériel..
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
Tu vas assez vite comprendre :
Les résolutions acceptables dépendent du nombre de bits et de la fréquence actuels de la machine. Données que sait récupérer GetDeviceCaps
Messages postés
32312
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
5 mai 2021
346
Si ça peut t'interesser :


<DllImport("gdi32.dll")> _
    Public Shared Function GetDeviceCaps(ByVal hDC As IntPtr, ByVal nIndex As Integer) As Integer
    End Function

    Public Enum DeviceCap As Integer

        ''' <summary>
        ''' Device driver version
        ''' </summary>
        DRIVERVERSION = 0
        ''' <summary>
        ''' Device classification
        ''' </summary>
        TECHNOLOGY = 2
        ''' <summary>
        ''' Horizontal size in millimeters
        ''' </summary>
        HORZSIZE = 4
        ''' <summary>
        ''' Vertical size in millimeters
        ''' </summary>
        VERTSIZE = 6
        ''' <summary>
        ''' Horizontal width in pixels
        ''' </summary>
        HORZRES = 8
        ''' <summary>
        ''' Vertical height in pixels
        ''' </summary>
        VERTRES = 10
        ''' <summary>
        ''' Number of bits per pixel
        ''' </summary>
        BITSPIXEL = 12
        ''' <summary>
        ''' Number of planes
        ''' </summary>
        PLANES = 14
        ''' <summary>
        ''' Number of brushes the device has
        ''' </summary>
        NUMBRUSHES = 16
        ''' <summary>
        ''' Number of pens the device has
        ''' </summary>
        NUMPENS = 18
        ''' <summary>
        ''' Number of markers the device has
        ''' </summary>
        NUMMARKERS = 20
        ''' <summary>
        ''' Number of fonts the device has
        ''' </summary>
        NUMFONTS = 22
        ''' <summary>
        ''' Number of colors the device supports
        ''' </summary>
        NUMCOLORS = 24
        ''' <summary>
        ''' Size required for device descriptor
        ''' </summary>
        PDEVICESIZE = 26
        ''' <summary>
        ''' Curve capabilities
        ''' </summary>
        CURVECAPS = 28
        ''' <summary>
        ''' Line capabilities
        ''' </summary>
        LINECAPS = 30
        ''' <summary>
        ''' Polygonal capabilities
        ''' </summary>
        POLYGONALCAPS = 32
        ''' <summary>
        ''' Text capabilities
        ''' </summary>
        TEXTCAPS = 34
        ''' <summary>
        ''' Clipping capabilities
        ''' </summary>
        CLIPCAPS = 36
        ''' <summary>
        ''' Bitblt capabilities
        ''' </summary>
        RASTERCAPS = 38
        ''' <summary>
        ''' Length of the X leg
        ''' </summary>
        ASPECTX = 40
        ''' <summary>
        ''' Length of the Y leg
        ''' </summary>
        ASPECTY = 42
        ''' <summary>
        ''' Length of the hypotenuse
        ''' </summary>
        ASPECTXY = 44
        ''' <summary>
        ''' Shading and Blending caps
        ''' </summary>
        SHADEBLENDCAPS = 45

        ''' <summary>
        ''' Logical pixels inch in X
        ''' </summary>
        LOGPIXELSX = 88
        ''' <summary>
        ''' Logical pixels inch in Y
        ''' </summary>
        LOGPIXELSY = 90

        ''' <summary>
        ''' Number of entries in physical palette
        ''' </summary>
        SIZEPALETTE = 104
        ''' <summary>
        ''' Number of reserved entries in palette
        ''' </summary>
        NUMRESERVED = 106
        ''' <summary>
        ''' Actual color resolution
        ''' </summary>
        COLORRES = 108

        ' Printing related DeviceCaps. These replace the appropriate Escapes

        ''' <summary>
        ''' Physical Width in device units
        ''' </summary>
        PHYSICALWIDTH = 110
        ''' <summary>
        ''' Physical Height in device units
        ''' </summary>
        PHYSICALHEIGHT = 111
        ''' <summary>
        ''' Physical Printable Area x margin
        ''' </summary>
        PHYSICALOFFSETX = 112
        ''' <summary>
        ''' Physical Printable Area y margin
        ''' </summary>
        PHYSICALOFFSETY = 113
        ''' <summary>
        ''' Scaling factor x
        ''' </summary>
        SCALINGFACTORX = 114
        ''' <summary>
        ''' Scaling factor y
        ''' </summary>
        SCALINGFACTORY = 115

        ''' <summary>
        ''' Current vertical refresh rate of the display device (for displays only) in Hz
        ''' </summary>
        VREFRESH = 116
        ''' <summary>
        ''' Horizontal width of entire desktop in pixels
        ''' </summary>
        DESKTOPVERTRES = 117
        ''' <summary>
        ''' Vertical height of entire desktop in pixels
        ''' </summary>
        DESKTOPHORZRES = 118
        ''' <summary>
        ''' Preferred blt alignment
        ''' </summary>
        BLTALIGNMENT = 119

    End Enum




    Public Sub GetDeviceCapsInfos()

        Using g As System.Drawing.Graphics = System.Drawing.Graphics.FromHwnd(IntPtr.Zero)
            Console.WriteLine("Graphics.DpiX: " & g.DpiX)
            Console.WriteLine("Graphics.DpiY: " & g.DpiY)
            Console.WriteLine()

            Dim hdc As IntPtr = g.GetHdc()

            For Each cap As DeviceCap In [Enum].GetValues(GetType(DeviceCap))
                Dim result As Integer = GetDeviceCaps(hdc, cap)
                Console.WriteLine(String.Format("{0}: {1}", cap, result))
            Next

            g.ReleaseHdc()
        End Using




    End Sub
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
Merci, mais j'ai déjà sous VB6 (et cela me va, à moi qui n'utilise pas VB.Net) ce qui m'intéresse et j'obtiens (conjugaison des deux fonctions) ce qui m'intéresse, à savoir : en fonction de mon écran (ses fréquences de balayage supportées : 60 et 75 hz chez moi) , les couleurs supportées ("True colour" uniquement chez moi) et le nb de bits (32 uniquement chez moi) : les seules résolutions qui seraient supportées alors pour ces paramètres. Et pas la totalité les résolutions (d'un nombre plus élevé) qui seraient supportées pour d'autres paramètres (couleur, etc ...)
En d'autres termes : ne me sont retournées que les 11 résolutions qui me sont permises. Ne figurent pas dans cette liste toutes les résolutions figurant dans l'énumération faite par Enumdisplaysettings seule (elles sont plus nombreuses (131) et concernent tous les cas de figure).
En d'autres termes encore : je prendrais (entre autres exemples) des risques en donnant depuis une appli instruction de passer la résolution à 1360*765 pixels, qui figure pourtant dans la liste retournée par Enumdisplaysettings seule, mais qui ne m'est pas permise..
Voilà ... Après : à chacun de décider des risques à prendre.
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
Bonjour

Il y a une différence entre les anciens écrans et ceux d'aujourd'hui
avec les écrans d'avant quand on modifiait la résolution la dimension du pixel était modifié.
L'image occupe toujours toute la surface de l'écran
Avec les écrans actuels quand on modifie la résolution en fait on
modifie la largeur logique et hauteur logique de l'écran la dimension
du pixel reste le meme.
Reste à savoir ce que tu veux faire si par ex ton application occupe
tout l'écran c.a.d résolution maximal
veux tu aussi que l'application occupe tout l'écran des autres pc ?