encor une modif résolution écran mais avec la gestion de la fréquence et du mode couleur. Il marche sous VB6 et W2k. Faites moi savoir si il tourne sous les autres Win.
Source / Exemple :
Public oldX, oldY, oldR, oldC As Long ' Résolution écran avant application
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 FindWindowA Lib "user32" (ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal handleW1 As Long, _
ByVal handleW1InsertWhere As Long, ByVal w As Long, _
ByVal x As Long, ByVal y As Long, ByVal z As Long, _
ByVal wFlags As Long) As Long
Private Const CCHDEVICENAME = 32
Private Const CCHFORMNAME = 32
Private Const DM_BITSPERPEL = &H40000
Private Const DM_WIDTH = &H80000
Private Const DM_HEIGHT = &H100000
Private Const DM_DISPLAYFREQUENCY = &H400000
Private Const WM_DEVMODECHANGE = &H1B
Private Const HWND_BROADCAST = &HFFFF&
Private Const HWND_DESKTOP = 0
Const TOGGLE_HIDEWINDOW = &H80
Const TOGGLE_UNHIDEWINDOW = &H40
Private Type DEVMODE
dmDeviceName As String * CCHDEVICENAME
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 * CCHFORMNAME
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 dynSetting() As String
Dim handleW1 As Long
' =================================== DEBUT DU CODE ================================
'---- Change la résolution écran
Public Sub ResolutionEcran(Chge As Boolean, sgWidth As Long, sgHeight As Long)
Dim blTMP As Boolean
Dim lgTMP As Long
Dim compt As Integer
If Chge = True Then ' modification de la résolution - début du programme
blTMP = EnumDisplaySettings(0, -1, dmEcran) ' stockage de la résolution écran avant modif
oldX = dmEcran.dmPelsWidth
oldY = dmEcran.dmPelsHeight
oldR = dmEcran.dmDisplayFrequency
oldC = dmEcran.dmBitsPerPel
If Not oldX = sgWidth Then ' si la résolution est différente de la résolution demandée
lgTMP = 0
cpt = 0 ' compteur d'affichage
ReDim dynSetting(0)
Do ' parcours tous les affichages possibles
blTMP = EnumDisplaySettings(0, lgTMP, dmEcran)
lgTMP = lgTMP + 1
If dmEcran.dmPelsWidth = sgWidth Then ' si résolution demandée
dynSetting(cpt) = Right("000" & dmEcran.dmBitsPerPel, 3) & _
Right("000" & dmEcran.dmDisplayFrequency, 3)
cpt = cpt + 1
ReDim Preserve dynSetting(cpt)
End If
Loop Until Not blTMP
' right(dynSetting(cpt - 1),3) ' Fréquence maximale acceptée par la carte
' left(dynSetting(cpt - 1),3) ' Mode couleur maxi accepté par la carte
For compt = cpt - 1 To 0 Step -1
If CLng(Left(dynSetting(compt), 3)) = oldC Then
If CLng(Right(dynSetting(compt), 3)) = oldR Then ' si même mode couleur et même fréquence
Exit For
Else ' même mode couleur mais fréquence inférieure
If CLng(Right(dynSetting(compt), 3)) > 71 Then ' contrainte sur la fréquence 72Hz
Exit For
End If
End If
Else ' mode couleur inférieur
If CLng(Right(dynSetting(comp), 3)) = oldR Then
Exit For
Else
If CLng(Right(dynSetting(comp), 3)) > 71 Then ' contrainte sur la fréquence 72Hz
Exit For
End If
End If
End If
Next
If cpt = 0 Then
'alerte : votre système ne supporte pas la résolution demandée
End
End If
Call Change(sgWidth, sgHeight, CLng(Left(dynSetting(compt), 3)), CLng(Right(dynSetting(compt), 3)))
End If
Else ' modification de la résolution - fin du programme
Call Change((oldX), (oldY), (oldC), (oldR))
End If
End Sub
Private Sub Change(width As Long, height As Long, pel As Long, freq As Long)
dmEcran.dmFields = DM_BITSPERPEL Or DM_WIDTH Or DM_HEIGHT Or DM_DISPLAYFREQUENCY
dmEcran.dmPelsWidth = width
dmEcran.dmPelsHeight = height
dmEcran.dmBitsPerPel = pel
dmEcran.dmDisplayFrequency = freq
lgTMP = ChangeDisplaySettings(dmEcran, 0)
Call SendMessage(HWND_BROADCAST, WM_DEVMODECHANGE, 0, 0)
End Sub
Conclusion :
A mettre dans un module et appeler la
Sub ResolutionEcran(Chge As Boolean, sgWidth As Long, sgHeight As Long)
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.