Changer les paramètres d'affichage

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 874 fois - Téléchargée 43 fois

Contenu du snippet

ResolutionEcran permet :
-Changement de résolution (800x600...)
-Changement de fréquence de rafraichissement (60Hz)
-Changement de qualité couleur (16 couleurs, 256 couleurs, High Color, True Color)

CurrentDisplaySettings permet de recupérer les param. actuels

Source / Exemple :


'A mettre dans un module
Option Explicit

Private Declare Function EnumDisplaySettings Lib "user32" Alias "EnumDisplaySettingsA" (ByVal lpszDeviceName As Long, ByVal iModeNum As Long, lpDevMode As Any) As Boolean
Private Declare Function ChangeDisplaySettings Lib "user32" Alias "ChangeDisplaySettingsA" (lpDevMode As Any, ByVal dwflags As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long

Private Const CCDEVICENAME = 32
Private Const CCFORMNAME = 32
Private Const DM_BITSPERPEL = &H40000
Private Const DM_PELSWIDTH = &H80000
Private Const DM_PELSHEIGHT = &H100000
Private Const CDS_UPDATEREGISTRY = &H1
Private Const CDS_TEST = &H4
Private Const DISP_CHANGE_SUCCESSFUL = 0
Private Const DISP_CHANGE_RESTART = 1
Private Const ENUM_CURRENT_SETTINGS = &HFFFF - 1
Private Const WM_DEVMODECHANGE = &H1B
Private Const HWND_BROADCAST = &HFFFF&
Private Const HWND_DESKTOP = 0

Private Type DEVMODE
    dmDeviceName As String * 32
    dmSpecVersion As Integer
    dmDriverVersion As Integer
    dmSize As Integer
    dmDriverExtra As Integer
    dmFields As Long
    dmOrientation As Integer
    dmPaperSize As Integer
    dmPaperLength As Integer
    dmPaperWidth As Integer
    dmScale As Integer
    dmCopies As Integer
    dmDefaultSource As Integer
    dmPrintQuality As Integer
    dmColor As Integer
    dmDuplex As Integer
    dmYResolution As Integer
    dmTTOption As Integer
    dmCollate As Integer
    dmFormName As String * 32
    dmUnusedPadding As Integer
    dmBitsPerPel As Integer
    dmPelsWidth As Long
    dmPelsHeight As Long
    dmDisplayFlags As Long
    dmDisplayFrequency As Long
End Type

Dim dmEcran As DEVMODE
Dim dmType As DEVMODE

Public Function CurrentDisplaySettings() As DEVMODE
Call EnumDisplaySettings(0&, ENUM_CURRENT_SETTINGS, CurrentDisplaySettings)
End Function

Public Sub ResolutionEcran(sgWidth As Long, sgHeight As Long, FrequenceRefresh As Long, QColor As Long)
    dmEcran.dmSize = LenB(dmEcran)
    Call EnumDisplaySettings(0&, ENUM_CURRENT_SETTINGS, dmEcran)
    dmEcran.dmPelsWidth = sgWidth
    dmEcran.dmPelsHeight = sgHeight
    dmEcran.dmDisplayFrequency = FrequenceRefresh 'en Hz
    '4 : 16 colors
    '8 : 256 colors
    '16 : High Color
    '24 : True Color
    '32 : True Color
    dmEcran.dmBitsPerPel = QColor
    Call ChangeDisplaySettings(dmEcran, CDS_UPDATEREGISTRY)
    Call SendMessage(HWND_BROADCAST, WM_DEVMODECHANGE, 0, 0)
    Call SendMessage(GetDesktopWindow, WM_DEVMODECHANGE, 0, 0)
End Sub

Conclusion :


Je l'ai testé sous XP mais je sais pas si il marche sous les autres Win.

A voir également

Ajouter un commentaire Commentaires
Messages postés
235
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
16 mai 2011
2
impeccable, ca correspond exactement à mon besoin et ca fonctionne impeccablement: 10/10 ;)
Messages postés
117
Date d'inscription
vendredi 22 avril 2005
Statut
Membre
Dernière intervention
26 juin 2007

j'ai testé le code en haut mais ca ne fonctionne pas!!!
par contre, dans le lien de PHANTOM_2005 juste au dessus ca marche bien.

je ne sais pas pourquoi?
Messages postés
184
Date d'inscription
mercredi 8 décembre 2004
Statut
Membre
Dernière intervention
1 septembre 2010
1
Il y a un peu la même chose sur

http://vb.developpez.com/faq/?page=Systeme#changer_resolution

pour ceux que ça intéresse

@+
Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
24
salut

bon, j'avais pas compris la question et je pensais que tu avais déclaré une var DEVMODE (ce qui d'ailleurs est déconseillé)...une variable a un type mais le type n'est pas une variable...

pour lire la résolution et toutes les autres infos, n'importe où dans ta form ou ailleurs:

'dans la zone déclaration
dim dm as devmode

'n'importe où dans du code
dm = CurrentDisplaySettings
msgbox "Largeur " & cstr(dmEcran.dmPelsWidth) & " pixels" & vbcrlf & "hauteur " & cstr(dmEcran.dmPelsHeight) & " pixels" & vbcrlf & "freq " & cstr(dmEcran.dmDisplayFrequency) & " Hz"
'pour la couleur, les valeurs sont soit 4,8,16,24,32

'puis pour changer :
ResolutionEcran 800,600,75,32

'puis pour restaurer
ResolutionEcran dm.dmPelsWidth, dm.dmPelsHeight, dm.dmDisplayFrequency, dm.dmBitsPerPel

ShareVB
Messages postés
235
Date d'inscription
mercredi 30 octobre 2002
Statut
Membre
Dernière intervention
6 octobre 2009

Bah g résolu mon pb a ma facon et donc ben je la partage c po a mon avi la meilleur solution lol loin de la puisque tu propose une idee que malheureusemen je n'est pa su apliquer vu mon niveau en vb alors voila ma soluce rajouter ceci au module :

Public RWidth As String
Public RHeight As String
Public RFrequency As String
Public RColor As String

Public Sub LireResolution()
dmEcran.dmSize = LenB(dmEcran)
Call EnumDisplaySettings(0&, ENUM_CURRENT_SETTINGS, dmEcran)
RWidth = dmEcran.dmPelsWidth
RHeight = dmEcran.dmPelsHeight
RFrequency = dmEcran.dmDisplayFrequency
RColor = dmEcran.dmBitsPerPel
End Sub

Puis dans la form il vous suffi de taper LireResolution et voila votre resolution etc .. sont stocker dans les variables : RWidth (largeur) RHeight (hauteur) RFrequency (Frequence) et enfin RColor (pour la couleur)
Voila jespere que ca va en aider qq un qui comme moi non pas compri ton principe pour lire merci qd mm pour ce bo module ;)
bonne prog a tous !++
Afficher les 16 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.