Page 1 sur 1
changer la resolution du desktop
Publié : mer. 12/avr./2006 20:16
par Thyphoon
Je cherche a écrire un programme qui me permet de changer la resolution du Desktop, comment faire ?
J'ai cherché un peu partout la seul chose que j'ai trouvé c'est sur Purearea ça permet de changer la resolution ecran mais des qu'on quitte le programme on revient a la resolution d'origine, et ça ne change apparement pas la resolution réel du desktop.
Si quelqu'un aune idée... merci d'avance
Publié : mer. 12/avr./2006 22:12
par erix14
Voilà :
Code : Tout sélectionner
Procedure ChangeDisplaySettings(Width.w, Height.w, Depth.w)
dmScreenSettings.DEVMODE
dmScreenSettings\dmSize = SizeOf(DEVMODE)
dmScreenSettings\dmPelsWidth = Width
dmScreenSettings\dmPelsHeight = Height
dmScreenSettings\dmBitsPerPel = Depth
dmScreenSettings\dmFields = 262144 | 524288 | 1048576
If ChangeDisplaySettings_(@dmScreenSettings, 1)
Result = 1
Else
Result = 0
EndIf
ProcedureReturn Result
EndProcedure
ChangeDisplaySettings(1024, 768, 32)
;ChangeDisplaySettings(1280, 1024, 32)
Publié : jeu. 13/avr./2006 5:15
par Thyphoon
Merci erix14 tu es mon sauveur...
C'est parfait, reste plus qu'a trouver pour choisir l'ecran de destination lorsque tu as plusieurs ecran

Publié : jeu. 13/avr./2006 20:01
par erix14
As-tu regardé la structure DEVMODE ?
dmPosition
Windows 98/Me, Windows 2000/XP: For display devices only, a POINTL structure that indicates the positional coordinates of the display device in reference to the desktop area. The primary display device is always located at coordinates (0,0).
Cela peut être une piste intéressante, le seul problème est que la structure DEVMODE déclaré dans PureBasic ne correspond pas exactement à celle de
http://msdn.microsoft.com/library/defau ... l_8nle.asp
à cause de l'union dmPosition correspond à dmOrientation;dmPaperSize;dmPaperLength;dmPaperWidth

mais avec une petite bidouille
ça devrait le faire.

Publié : jeu. 13/avr./2006 20:21
par Thyphoon
merci erix14! j'avais regardé un peu sur MSDN, mais j'avoue que des que j'arrive là bas, je me sens perdu, et je comprends plus rien....

manque d'experience sans doute
Est ce que ça serait trop te demander (tes pas obliger surtout je veux pas t'embeter)de me faire un petit exemple de ton
intégré a
Code : Tout sélectionner
Procedure ChangeDisplaySettings(Width.w, Height.w, Depth.w)
dmScreenSettings.DEVMODE
dmScreenSettings\dmSize = SizeOf(DEVMODE)
dmScreenSettings\dmPelsWidth = Width
dmScreenSettings\dmPelsHeight = Height
dmScreenSettings\dmBitsPerPel = Depth
dmScreenSettings\dmFields = 262144 | 524288 | 1048576
If ChangeDisplaySettings_(@dmScreenSettings, 1)
Result = 1
Else
Result = 0
EndIf
ProcedureReturn Result
EndProcedure
ChangeDisplaySettings(1024, 768, 32)
L'histoire du DEVMODE de purebasic pas identique a celui des ApIs c'est un bug ou bas du tout ?
Dans tout les cas un tres grand merci

Publié : jeu. 13/avr./2006 22:45
par erix14
L'histoire du DEVMODE de purebasic pas identique a celui des ApIs c'est un bug ou bas du tout ?
Non, ce n'est pas un bug, c'est simplement que la retranscription de la structure n'a pas été fait correctement il aurait fallu intégrer une StructureUnion dans la structure (voir l'aide de PureBasic sur les structures)
Code : Tout sélectionner
Procedure ChangeDisplaySettings(Width.w, Height.w, Depth.w)
dmScreenSettings.DEVMODE
dmScreenSettings\dmSize = SizeOf(DEVMODE)
dmScreenSettings\dmPelsWidth = Width
dmScreenSettings\dmPelsHeight = Height
dmScreenSettings\dmBitsPerPel = Depth
dmScreenSettings\dmFields = 262144 | 524288 | 1048576
If ExamineDesktops() > 1; si le nombre de bureaux est plus grand que 1
*dmPosition.POINT = @dmScreenSettings\dmOrientation
*dmPosition\x = DesktopWidth(1); le deuxième bureau est à la suite du premier
*dmPosition\y = 0
EndIf
If ChangeDisplaySettings_(@dmScreenSettings, 1)
Result = 1
Else
Result = 0
EndIf
ProcedureReturn Result
EndProcedure
ChangeDisplaySettings(1024, 768, 32)
;ChangeDisplaySettings(1280, 1024, 32)
Je n'ai pas testé ce code...
Publié : ven. 14/avr./2006 8:04
par Droopy
Il y a ce code de Gillou / DarkDragon qui fait ça :
Code : Tout sélectionner
;/ Author : DarkDragon / Gillou
; Permanent=1 : Make this mode permanent ( even when program quits )
; Permanent=0 = temporary mode
#DISP_CHANGE_SUCCESSFUL = 0 ; The settings change was successful.
#DISP_CHANGE_RESTART = 1 ; The computer must be restarted in order for the graphics mode to work.
#DISP_CHANGE_BADFLAGS = -4 ; An invalid set of flags was passed in.
#DISP_CHANGE_FAILED = -1 ; The display driver failed the specified graphics mode.
#DISP_CHANGE_BADMODE = -2 ; The graphics mode is not supported.
#DISP_CHANGE_NOTUPDATED = -3 ; Windows NT only: Unable to write settings to the registry.
ProcedureDLL ChangeDisplaySettings(width,height,Depth,Freq,Permanent)
dmScreenSettings.DEVMODE
dmScreenSettings\dmSize = SizeOf(dmScreenSettings)
dmScreenSettings\dmPelsWidth = width
dmScreenSettings\dmPelsHeight = height
dmScreenSettings\dmBitsPerPel = Depth
dmScreenSettings\dmDisplayFrequency=Freq
dmScreenSettings\dmFields = 262144 | 524288 | 1048576
If Permanent
retour=ChangeDisplaySettings_(@dmScreenSettings, 1)
Else
retour=ChangeDisplaySettings_(@dmScreenSettings, 4)
EndIf
ProcedureReturn retour
EndProcedure
Publié : ven. 14/avr./2006 8:06
par Thyphoon
Merci a tous c'est parfait !!
