Modifier correctement la resolution de l'ecran

Soyez le premier à donner votre avis sur cette source.

Vue 5 237 fois - Téléchargée 805 fois


Description

J'ai trouvé plusieurs sources pour modifier la résolution d'écran sur ce site, mais à chaque fois, la barre des taches n'était pas déplacée. Si on augmentait la résolution, on se retrouvait avec une barre des taches vers le milieu de l'écran, et en la réduisant, on avait une barre des taches en dehors de l'écran. Cette source corrige ce problème.

MISE A JOUR :
- La fonction SetRes est plus "intelligente" : lorsqu'un paramètre passé est identique à la valeur courante, cette dernière n'est plus modifiée.
- Les fonctions GetResX et GetResY font maintenant directement appel aux API (plus de Screen.). Avec l'ancienne méthode, lorqu'on testait la résolution juste après l'avoir modifiée, on avait les anciennes valeurs.

Source / Exemple :


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 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
Public Enum EnumSetRes
   SUCCES = 0
   ECHEC = -2
End Enum

Public Function GetNbCoul() As Integer
   Dim dmEcran As DEVMODE
   Dim blTMP As Boolean
   blTMP = EnumDisplaySettings(0, -1, dmEcran)
   GetNbCoul = dmEcran.dmBitsPerPel
End Function
Public Function GetResX() As Integer
   Dim dmEcran As DEVMODE
   EnumDisplaySettings 0, -1, dmEcran
   GetResX = dmEcran.dmPelsWidth
'   GetResX = Screen.Width \ Screen.TwipsPerPixelX
End Function
Public Function GetResY() As Integer
   Dim dmEcran As DEVMODE
   EnumDisplaySettings 0, -1, dmEcran
   GetResY = dmEcran.dmPelsHeight
'   GetResY = Screen.Height \ Screen.TwipsPerPixelY
End Function
Public Function SetRes(ByVal RezX As Single, ByVal RezY As Single, ByVal NbCoul As Integer) As EnumSetRes
    If RezX = GetResX And RezY = GetResY And NbCoul = GetNbCoul Then Exit Function
    Dim dmEcran As DEVMODE
    Dim blTMP As Boolean, lgTMP As Long
    blTMP = EnumDisplaySettings(0, -1, dmEcran)
    'dmEcran.dmFields = 1835008
    If RezX <> GetResX Then dmEcran.dmFields = &H80000
    If RezY <> GetResY Then dmEcran.dmFields = dmEcran.dmFields Or &H100000
    If NbCoul <> GetNbCoul Then dmEcran.dmFields = dmEcran.dmFields Or &H100000
    dmEcran.dmPelsWidth = RezX
    dmEcran.dmPelsHeight = RezY
    dmEcran.dmBitsPerPel = NbCoul
    Call ChangeDisplaySettings(dmEcran, 1)
    blTMP = SendMessage(65535, 27, 0, 0)
    Dim ScInfo As Long
    ScInfo = RezY * 2 ^ 16 + RezX
    SendMessage &HFFFF&, &H7E, ByVal NbCoul, ByVal ScInfo
    SetRes = lgTMP
End Function

Conclusion :


Le fichier ZIP contient un projet de test très simple.

Je vous recommande de tester ce code dans un programm compilé, car l'environnement de développement de VB peut (parfois) planter lors du changement de résolution (c'est également la cas si vous la changez avec le Panneau de Configuration).

Ce code a été testé et fonctionne sous :
- Win95
- Win98SE
- WinXP
- WinME
- WinNT4 (SP6)
- Win2k

Si vous testez ce code sous une autre version de Windows, merci de laisser un commentaire afin d'indiquer si ce code fonctionne ou non.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
14
Date d'inscription
samedi 8 octobre 2005
Statut
Membre
Dernière intervention
12 mai 2008

Dac merci du conseil, puis je comptais aussi peut etre acheter un bouquin sur un langage pour vraiment avoir de bonnes bases...
Messages postés
933
Date d'inscription
dimanche 1 avril 2001
Statut
Modérateur
Dernière intervention
9 janvier 2012
2
Le C++ n'est pas vraiment la continuité du C... C'est un autre language trés trés proche syntaxtiquement parlant. Mais apporte des notions bien différentes comme les classes (donc la programmation objet, ...).

Le compilateur tu parles je pense ?

Visual Studio Express (gratuit).

Va donc faire un tour sur CppFrance je t'y retrouverai. Tu trouveras aussi un tuto pour mettre en place VS Express.

En C faut se faire un peu mal au début, mais après...
Messages postés
14
Date d'inscription
samedi 8 octobre 2005
Statut
Membre
Dernière intervention
12 mai 2008

Lol, okay, bah j'vais m'orienter vers le C alors, puis le C++ est la continuité je crois...? M'enfin en tout cas, deja ca de fait, et en C, que y a t il comme logiciel potable?
Messages postés
933
Date d'inscription
dimanche 1 avril 2001
Statut
Modérateur
Dernière intervention
9 janvier 2012
2
De rien ! :-)

Mais pense sérieusement au C. Le code natif il y a que ca de vrai ;-)
Messages postés
14
Date d'inscription
samedi 8 octobre 2005
Statut
Membre
Dernière intervention
12 mai 2008

Ah tout de suite je retrouve le sourir lol, étant débutant ^^, j'ai fait quelques petits logiciels sans importance, mais la, je pense que ca va m'aider grandement :D merci ^^
Afficher les 32 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.