IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

VB - Changer la resolution d'ecran


Sujet :

VB.NET

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 43
    Points : 43
    Points
    43
    Par défaut VB - Changer la resolution d'ecran
    bonjour tout le monde,

    Je cherche un moyen de changer la résolution d'ecran via mon programme. J'ai trouvé un code sur le net qui fonctionne presque parfaitement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    Imports System.Runtime.InteropServices
    Module Module1
     
     
        Private Declare Auto Function EnumDisplaySettings Lib "user32.dll" ( _
            <MarshalAs(UnmanagedType.LPTStr)> ByVal lpszDeviceName As String, _
            ByVal iModeNum As Int32, _
            ByRef lpDevMode As DEVMODE _
        ) As Boolean
     
        Private Declare Auto Function ChangeDisplaySettings Lib "user32.dll" ( _
            ByRef lpDevMode As DEVMODE, _
            ByVal dwFlags As Int32 _
        ) As Int32
     
        Private Const DM_BITSPERPEL As Int32 = &H40000
        Private Const DM_PELSWIDTH As Int32 = &H80000
        Private Const DM_PELSHEIGHT As Int32 = &H100000
     
        Private Const DISP_CHANGE_SUCCESSFUL As Int32 = 0
     
        <StructLayout(LayoutKind.Sequential)> _
        Private Structure POINTL
            Public x As Int32
            Public y As Int32
        End Structure
     
        <StructLayout(LayoutKind.Explicit)> _
        Private Structure DEVMODE_union1
            ' struct {
            <FieldOffset(0)> Public dmOrientation As Int16
            <FieldOffset(2)> Public dmPaperSize As Int16
            <FieldOffset(4)> Public dmPaperLength As Int16
            <FieldOffset(6)> Public dmPaperWidth As Int16
            ' }
            <FieldOffset(0)> Public dmPosition As POINTL
        End Structure
     
        <StructLayout(LayoutKind.Explicit)> _
        Private Structure DEVMODE_union2
            <FieldOffset(0)> Public dmDisplayFlags As Int32
            <FieldOffset(0)> Public dmNup As Int32
        End Structure
     
        <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto)> _
        Private Structure DEVMODE
            Private Const CCDEVICENAME As Int32 = 32
            Private Const CCFORMNAME As Int32 = 32
     
            <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=CCDEVICENAME)> _
            Public dmDeviceName As String
            Public dmSpecVersion As Int16
            Public dmDriverVersion As Int16
            Public dmSize As Int16
            Public dmDriverExtra As Int16
            Public dmFields As Int32
            Public u1 As DEVMODE_union1
            Public dmScale As Int16
            Public dmCopies As Int16
            Public dmDefaultSource As Int16
            Public dmPrintQuality As Int16
            Public dmColor As Int16
            Public dmDuplex As Int16
            Public dmYResolution As Int16
            Public dmTTOption As Int16
            Public dmCollate As Int16
            <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=CCFORMNAME)> _
            Public dmFormName As String
            Public dmUnusedPadding As Int16
            Public dmBitsPerPel As Int16
            Public dmPelsWidth As Int32
            Public dmPelsHeight As Int32
            Public u2 As DEVMODE_union2
            Public dmDisplayFrequency As Int32
            Public dmICMMethod As Int32
            Public dmICMIntent As Int32
            Public dmMediaType As Int32
            Public dmDitherType As Int32
            Public dmReserved1 As Int32
            Public dmReserved2 As Int32
            Public dmPanningWidth As Int32
            Public dmPanningHeight As Int32
        End Structure
     
        Public Function SetResolution( _
            ByVal Width As Int32, _
            ByVal Height As Int32, _
            ByVal BitsPerPixel As Int16 _
        ) As Boolean
     
            Dim dm As DEVMODE
     
            If Not EnumDisplaySettings(Nothing, 0, dm) Then
                Return False
            Else
     
                With dm
                    .dmFields = _
                        DM_PELSWIDTH Or DM_PELSHEIGHT Or DM_BITSPERPEL
                    .dmPelsWidth = Width
                    .dmPelsHeight = Height
                    .dmBitsPerPel = BitsPerPixel
     
                End With
                Return (ChangeDisplaySettings(dm, 0) = DISP_CHANGE_SUCCESSFUL)
            End If
        End Function
     
    End Module
    Seulement de code me permet de changer la résolution seulement sur l'écran principal, celle de mon second écran ne change pas.
    J'ai bien essayé de l'adapter en faisant une boucle avec Screen.Allscreens mais je n'y arrive pas. Avez vous une piste à me donner pour m'aider svp.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par MSDN
    To change the settings of a specified display device, use the ChangeDisplaySettingsEx function
    Donc il faut utiliser ChangeDisplaySettingsEx et non ChangeDisplaySettings...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
        Private Declare Auto Function ChangeDisplaySettingsEx Lib "user32.dll" ( _
            ByVal lpszDeviceName As String, _
            ByRef lpDevMode As DEVMODE, _
            ByVal hwnd As IntPtr, _
            ByVal dwFlags As Int32, _
            ByVal lParam As IntPtr _
        ) As Int32
     
        For Each s As Screen In Screen.AllScreens
     
            Dim dm As DEVMODE
            ...
            ChangeDisplaySettingsEx(s.DeviceName, dm, IntPtr.Zero, 0, IntPtr.Zero)
     
        Next

Discussions similaires

  1. changer la resolution de l'ecran
    Par altaro dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 03/09/2010, 11h01
  2. [VBA-E2003] Syntaxe pour changer la resolution de l ecran
    Par Slumpy dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 20/04/2006, 16h20
  3. Resolution d'écran
    Par LordBob dans le forum KDE
    Réponses: 4
    Dernier message: 21/11/2005, 20h18
  4. Résolution d'écran sous Xfree
    Par YéTeeh dans le forum Applications et environnements graphiques
    Réponses: 6
    Dernier message: 30/08/2005, 13h33
  5. Résolution et Ecran Hp M70
    Par gendo dans le forum Matériel
    Réponses: 3
    Dernier message: 18/09/2004, 13h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo