► Afficher le texte
Code : Tout sélectionner
#cs
- vérifie et sauvegarde les paramètres d'affichage actuels (resolution, refresh rate, bitperpixel)
- liste les modes graphiques supportés par le périphérique
- change la résolution d'écran (la nouvelle résolution est toujours en 32 bpp à 60 kHz)
- masque les icones du bureau
- restaure tous les paramètres d'affichage initiaux (bouton Reset)
- sauvegarde et restaure la position des icones du bureau
#ce
;==================================================
#include <GuiListView.au3>
Opt("WinTitleMatchMode", 4)
;Global Const $GUI_ENABLE = 64
;Global Const $GUI_DISABLE = 128
Global Const $GUI_EVENT_CLOSE = -3
Global Const $CBS_SORT = 0x100
Global Const $CBS_DROPDOWN = 0x2
Global Const $CBS_AUTOHSCROLL = 0x40
Global Const $WS_VSCROLL = 0x00200000
Global $hWnd_LV = ControlGetHandle("Program Manager", "", "[CLASS:SysListView32]")
Global $curHR, $curVR, $curRR, $curNC, $curBPP, $string = ""
Global $sINI = @tempdir & "\Desktop.icn"
Global $originalsettings = IniRead($sINI, "Screen", "originalset", "0")
_GetCurrentDisplaySettings()
If $originalsettings = 0 Then ; sauve config actuelle
IniDelete($sINI, "Screen")
IniWrite($sINI, "Screen", "curHR", $curHR)
IniWrite($sINI, "Screen", "curVR", $curVR)
IniWrite($sINI, "Screen", "curRR", $curRR)
IniWrite($sINI, "Screen", "curBPP", $curBPP)
IniWrite($sINI, "Screen", "originalset", "1")
$originalsettings = 1
_Icons("save")
Sleep(100)
EndIf
$ResGUI = GUICreate ("Resolution", 150, 80, @desktopwidth/2, 50)
GUICtrlCreateLabel("Change to ", 5, 8, 60, 25)
$reslist = GUICtrlCreateCombo("", 60, 5, 85, 16, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL, $WS_VSCROLL, $CBS_SORT))
$hideicons = GUICtrlCreateCheckbox (" Hide Desktop icons", 10, 30, 140, 20)
GUICtrlSetState ($hideicons, 1)
$resok = GUICtrlCreateButton ("OK", 5, 53, 57, 22)
$resreset = GUICtrlCreateButton ("Reset", 70, 53, 75, 22)
GUISetState()
If IniRead($sINI, "Screen", "curHR", $curHR) = @desktopwidth Then GUICtrlSetState ($resreset, 128)
_GetAllDisplaySettings()
GUICtrlSetData ($reslist, $string, $curHR & " x " & $curVR)
If ProcessExists("wmiprvse.exe") Then ProcessClose("wmiprvse.exe")
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
Case $msg = $resok
$settings = StringSplit (StringStripWS (GUICtrlRead($reslist), 8), "x")
_DisplayChangeRes($settings[1], $settings[2], 32, 60)
Sleep(100)
If GUICtrlRead($hideicons)=1 Then ControlHide("Program Manager", "", "[CLASS:SysListView32]")
GUICtrlSetState ($resreset, 64)
GUICtrlSetData ($reslist, @desktopwidth & " x " & @desktopheight)
Case $msg = $resreset
$curHR = IniRead($sINI, "Screen", "curHR", $curHR)
$curVR = IniRead($sINI, "Screen", "curVR", $curVR)
$curRR = IniRead($sINI, "Screen", "curRR", $curRR)
$curBPP = IniRead($sINI, "Screen", "curBPP", $curBPP)
_DisplayChangeRes($curHR, $curVR, $curBPP, $curRR)
Sleep(100)
_Icons("restore")
Sleep(1000)
ControlShow("Program Manager", "", "[CLASS:SysListView32]")
GUICtrlSetState ($resreset, 128)
GUICtrlSetData ($reslist, $curHR & " x " & $curVR)
EndSelect
WEnd
;=============================================
Func _GetCurrentDisplaySettings()
Dim $Obj_WMIService = ObjGet('winmgmts:\\' & @ComputerName & '\root\cimv2')
If (IsObj($Obj_WMIService)) And (Not @error) Then
Dim $Col_Items = $Obj_WMIService.ExecQuery('Select * from Win32_VideoController')
Local $Obj_Item
For $Obj_Item In $Col_Items
$curHR = $Obj_Item.CurrentHorizontalResolution
$curVR = $Obj_Item.CurrentVerticalResolution
$curRR = $Obj_Item.CurrentRefreshRate
$curNC = $Obj_Item.CurrentNumberOfColors
$curBPP = $Obj_Item.CurrentBitsPerPixel
Next
EndIf
;msgbox(0,"", $curHR & " x " & $curVR & " - " & $curRR & " - " & $curNC & " - " & $curBPP)
EndFunc
;============================================
Func _GetAllDisplaySettings()
Dim $Obj_WMIService = ObjGet('winmgmts:\\' & @ComputerName & '\root\cimv2')
If (IsObj($Obj_WMIService)) And (Not @error) Then
Dim $Col_Items = $Obj_WMIService.ExecQuery('Select * from CIM_VideoControllerResolution')
Local $Obj_Item
Dim $aArray[1]
For $Obj_Item In $Col_Items
$01 = $Obj_Item.HorizontalResolution
$02 = $Obj_Item.VerticalResolution
If $01>800 Then
$aArray[0] += 1
If UBound($aArray) <= $aArray[0] Then ReDim $aArray[$aArray[0]*4]
$aArray[$aArray[0]] = $01 & " x " & $02 & "|"
$string = StringReplace($string, $aArray[$aArray[0]], "") ; pour les doublons
$string = $string & $aArray[$aArray[0]]
EndIf
Next
;msgbox(0,"",$string)
EndIf
EndFunc
;===============================================
Func _DisplayChangeRes($WIDTH, $HEIGHT, $BPP, $FREQ)
$DM_PELSWIDTH = 0x00080000
$DM_PELSHEIGHT = 0x00100000
$DM_BITSPERPEL = 0x00040000
$DM_DISPLAYFREQUENCY = 0x00400000
$CDS_TEST = 0x00000002
$CDS_UPDATEREGISTRY = 0x00000001
$DISP_CHANGE_RESTART = 1
$DISP_CHANGE_SUCCESSFUL = 0
$HWND_BROADCAST = 0xffff
$WM_DISPLAYCHANGE = 0x007E
$DEVMODE = DLLStructCreate ("byte[32];int[10];byte[32];int[6]")
$B = DllCall("user32.dll", "int", "EnumDisplaySettings", "ptr", 0, "long", 0, "ptr", DLLStructGetPtr ($DEVMODE))
If @error Then
$B = 0
Else
$B = $B[0]
EndIf
If $B <> 0 Then
DllStructSetData ($DEVMODE, 2, BitOR($DM_PELSWIDTH, $DM_PELSHEIGHT, $DM_BITSPERPEL, $DM_DISPLAYFREQUENCY), 5)
DllStructSetData ($DEVMODE, 4, $WIDTH, 2)
DllStructSetData ($DEVMODE, 4, $HEIGHT, 3)
DllStructSetData ($DEVMODE, 4, $BPP, 1)
DllStructSetData ($DEVMODE, 4, $FREQ, 5)
$B = DllCall("user32.dll", "int", "ChangeDisplaySettings", "ptr", DLLStructGetPtr ($DEVMODE), "int", $CDS_TEST)
If @error Then
$B = -1
Else
$B = $B[0]
EndIf
Select
Case $B = $DISP_CHANGE_RESTART
$DEVMODE = ""
Return 2
Case $B = $DISP_CHANGE_SUCCESSFUL
DllCall("user32.dll", "int", "ChangeDisplaySettings", "ptr", DLLStructGetPtr ($DEVMODE), "int", $CDS_UPDATEREGISTRY)
DllCall("user32.dll", "int", "SendMessage", "hwnd", $HWND_BROADCAST, "int", $WM_DISPLAYCHANGE, _
"int", $BPP, "int", $HEIGHT * 2 ^ 16 + $WIDTH)
$DEVMODE = ""
Return 1
Case Else
$DEVMODE = ""
Return $B
EndSelect
EndIf
EndFunc ;==>DisplayChangeRes
;===========================================
Func _Icons($sMode)
Switch $sMode
Case "save"
IniDelete($sINI, "Icons")
For $nIdx = 0 To _GUICtrlListView_GetItemCount($hWnd_LV) - 1
$sIconText = _GUICtrlListView_GetItemText($hWnd_LV, $nIdx)
$aPos = _GUICtrlListView_GetItemPosition($hWnd_LV, $nIdx)
If NOT @error Then IniWrite($sINI, "Icons", $sIconText, $aPos[0] & ":" & $aPos[1])
Next
Case "restore"
For $nIdx = 0 To _GUICtrlListView_GetItemCount($hWnd_LV) - 1
$sIconText = _GUICtrlListView_GetItemText($hWnd_LV, $nIdx)
$aPos = StringSplit(IniRead($sINI, "Icons", $sIconText, "0:0"), ":")
If $aPos[0] <> 2 Then ContinueLoop
_GUICtrlListView_SetItemPosition($hWnd_LV, $nIdx, $aPos[1], $aPos[2])
Next
EndSwitch
EndFunc
La gestion des icones vient de l'UDF : IconMap.AU3
La fonction DisplayChangeRes est de GaryFrost du forum US
Le traitement des doublons : http://www.autoitscript.com/forum/topic ... -from-file
Les modes graphiques disponibles : adaptation d'un script vbs de JC BELLAMY