Modification de la fréquence d'affichage d'un écran :

1) Déclaration de la structure DEVMOD

DEVMODEA est une structure
dmDeviceName est une chaîne fixe sur 32 //Type C : BYTE
dmSpecVersion est un entier sur 2 octets //Type C : WORD
dmDriverVersion est un entier sur 2 octets //Type C : WORD
dmSize est un entier sur 2 octets //Type C : WORD
dmDriverExtra est un entier sur 2 octets //Type C : WORD
dmFields est un entier //Type C : DWORD
dmOrientation est un entier sur 2 octets //Type C : short
dmPaperSize est un entier sur 2 octets //Type C : short
dmPaperLength est un entier sur 2 octets //Type C : short
dmPaperWidth est un entier sur 2 octets //Type C : short
dmScale est un entier sur 2 octets //Type C : short
dmCopies est un entier sur 2 octets //Type C : short
dmDefaultSource est un entier sur 2 octets //Type C : short
dmPrintQuality est un entier sur 2 octets //Type C : short
dmColor est un entier sur 2 octets //Type C : short
dmDuplex est un entier sur 2 octets //Type C : short
dmYResolution est un entier sur 2 octets //Type C : short
dmTTOption est un entier sur 2 octets //Type C : short
dmCollate est un entier sur 2 octets //Type C : short
dmFormName est une chaîne fixe sur 32 //Type C : BYTE
dmLogPixels est un entier sur 2 octets //Type C : WORD
dmBitsPerPel est un entier //Type C : DWORD
dmPelsWidth est un entier //Type C : DWORD
dmPelsHeight est un entier //Type C : DWORD
dmDisplayFlags est un entier //Type C : DWORD
dmDisplayFrequency est un entier //Type C : DWORD
dmICMMethod est un entier //Type C : DWORD
dmICMIntent est un entier //Type C : DWORD
dmMediaType est un entier //Type C : DWORD
dmDitherType est un entier //Type C : DWORD
dmICCManufacturer est un entier //Type C : DWORD
dmICCModel est un entier //Type C : DWORD
dmPanningWidth est un entier //Type C : DWORD
dmPanningHeight est un entier //Type C : DWORD
FIN

// Déclaration des constantes
CONSTANTE DM_BITSPERPEL=262144
CONSTANTE DM_PELSWIDTH=524288
CONSTANTE DM_PELSHEIGHT=1048576
CONSTANTE DM_DISPLAYFREQUENCY=4194304

CONSTANTE CDS_TEST=2
CONSTANTE CDS_UPDATEREGISTRY=1
CONSTANTE CDS_TEMP=0

1) Listage des résolutions dans un tableau :

dm est une DEVMODEA
iModeNum est un entier
TANTQUE API("USER32","EnumDisplaySettingsA",Null,iModeNum,&dm)
TableAjouteLigne(TableResolutions,dm:dmDeviceName,dm:dmBitsPerPel,dm:dmPelsW
idth,dm:dmPelsHeight,dm:dmDisplayFrequency)
iModeNum++
FIN

2) Bouton1 = Check si la résolution est Ok (ne modifie rien)

SI TableSelectOccurrence(TableResolutions)=0 ALORS RETOUR
dmtemp est une DEVMODEA
dmtemp:dmBitsPerPel=TableResolutions.dmBitsPerPel
dmtemp:dmPelsHeight=TableResolutions.dmPelsHeight
dmtemp:dmPelsWidth=TableResolutions.dmPelsWidth
dmtemp:dmDisplayFrequency=TableResolutions.dmDisplayFrequency
dmtemp:dmFields=OUBinaire(dmtemp:dmFields,DM_BITSPERPEL)
dmtemp:dmFields=OUBinaire(dmtemp:dmFields,DM_PELSWIDTH)
dmtemp:dmFields=OUBinaire(dmtemp:dmFields,DM_PELSHEIGHT)
dmtemp:dmFields=OUBinaire(dmtemp:dmFields,DM_DISPLAYFREQUENCY)
dmtemp:dmSize=Dimension(dmtemp)
SI API("user32","ChangeDisplaySettingsA",&dmtemp, CDS_TEST)<>0 ALORS
Erreur(ErreurInfo())
FIN

3) Bouton2 = Modification temporaire de la résolution

// Idem que le bouton 1 mais mettre le flag à 0 //

SI TableSelectOccurrence(TableResolutions)=0 ALORS RETOUR
dmtemp est une DEVMODEA
dmtemp:dmBitsPerPel=TableResolutions.dmBitsPerPel
dmtemp:dmPelsHeight=TableResolutions.dmPelsHeight
dmtemp:dmPelsWidth=TableResolutions.dmPelsWidth
dmtemp:dmDisplayFrequency=TableResolutions.dmDisplayFrequency
dmtemp:dmFields=OUBinaire(dmtemp:dmFields,DM_BITSPERPEL)
dmtemp:dmFields=OUBinaire(dmtemp:dmFields,DM_PELSWIDTH)
dmtemp:dmFields=OUBinaire(dmtemp:dmFields,DM_PELSHEIGHT)
dmtemp:dmFields=OUBinaire(dmtemp:dmFields,DM_DISPLAYFREQUENCY)
dmtemp:dmSize=Dimension(dmtemp)
SI API("user32","ChangeDisplaySettingsA",&dmtemp, CDS_TEMP)<>0 ALORS
Erreur(ErreurInfo())
FIN

3) Bouton3 = MOdification permanente (maj de la base de registre)

// Idem que le bouton 1 mais mettre le flag à 1 //

SI TableSelectOccurrence(TableResolutions)=0 ALORS RETOUR
dmtemp est une DEVMODEA
dmtemp:dmBitsPerPel=TableResolutions.dmBitsPerPel
dmtemp:dmPelsHeight=TableResolutions.dmPelsHeight
dmtemp:dmPelsWidth=TableResolutions.dmPelsWidth
dmtemp:dmDisplayFrequency=TableResolutions.dmDisplayFrequency
dmtemp:dmFields=OUBinaire(dmtemp:dmFields,DM_BITSPERPEL)
dmtemp:dmFields=OUBinaire(dmtemp:dmFields,DM_PELSWIDTH)
dmtemp:dmFields=OUBinaire(dmtemp:dmFields,DM_PELSHEIGHT)
dmtemp:dmFields=OUBinaire(dmtemp:dmFields,DM_DISPLAYFREQUENCY)
dmtemp:dmSize=Dimension(dmtemp)
SI API("user32","ChangeDisplaySettingsA",&dmtemp, CDS_UPDATEREGISTRY)<>0
ALORS
Erreur(ErreurInfo())
FIN