- Offizieller Beitrag
Ich habe vor, ein kleines Tool zum ändern der Bildschirm-Auflösung zu schreiben.
Dazu bräuchte ich mal eure Hilfe. Dieses kleine Testscript soll alle verfügbaren Auflösungen (Einschränkung: nur die 32 Bit-Auflösungen) von allen angeschlossenen Monitoren liefern:
#include <Array.au3>
#include <WinAPI.au3>
#include <WinAPIGdi.au3>
Global $aDevices = _GetDisplayDevices()
Global $aDispaySettings[UBound($aDevices)], $aTmp
For $i = 0 To UBound($aDevices) - 1
$aTmp = _GetDisplaySettings($aDevices[$i])
$aDispaySettings[$i] = $aTmp
_ArrayDisplay($aTmp, $aDevices[$i])
Next
Func _GetDisplayDevices()
Local $aDevice, $iDevNum = 0, $sOut = ''
While True
$aDevice = _WinAPI_EnumDisplayDevices('', $iDevNum)
If @error Or Not $aDevice[0] Then ExitLoop
If BitAND($aDevice[3], 1) Then $sOut &= $aDevice[1] & @LF
$iDevNum += 1
WEnd
Return StringSplit(StringTrimRight($sOut, 1), @LF, 2)
EndFunc
Func _GetDisplaySettings($sDevice, $iBPP = 32)
Local $iMode = 0, $sCurrent, $aData, $sOut, $sSettings, $aDisplaySettings
$aData = _WinAPI_EnumDisplaySettings($sDevice, $ENUM_CURRENT_SETTINGS)
$sCurrent = StringFormat('%d x %d, %d bit\n', $aData[0], $aData[1], $aData[2])
While 1
$aData = _WinAPI_EnumDisplaySettings($sDevice, $iMode)
If @error Then ExitLoop
If $aData[2] = $iBPP Then
$sSettings = StringFormat('%d x %d, %d bit\n', $aData[0], $aData[1], $aData[2])
$sOut &= StringReplace($sSettings, @LF, ($sSettings = $sCurrent ? ' (Aktiv)' : '')) & @LF
EndIf
$iMode += 1
WEnd
$aDisplaySettings = StringSplit(StringTrimRight($sOut, 1), @LF, 2)
$aDisplaySettings = _ArrayUnique($aDisplaySettings, 0, 0, 0, $ARRAYUNIQUE_NOCOUNT)
_ArrayNumberSort($aDisplaySettings)
Return $aDisplaySettings
EndFunc
Func _ArrayNumberSort(ByRef $aData)
Local $vTmp
For $i = 0 To UBound($aData) - 2
For $j = UBound($aData) - 1 To $i + 1 Step -1
If Number($aData[$i]) < Number($aData[$j]) Then
$vTmp = $aData[$i]
$aData[$i] = $aData[$j]
$aData[$j] = $vTmp
EndIf
Next
Next
EndFunc
Alles anzeigen
Bei mir (Windows 7, 64 Bit) funktioniert das auch einwandfrei, aber ich weiß nicht, ob das auch unter anderen Windows-Versionen der Fall ist.
Wenn alles funktioniert gibt das Script pro angeschlossenen Monitor ein Array aus, in dem die Auflösungen aufgelistet sind und die gerade aktive Auflösung entsprechend markiert ist.
Es würde mir helfen, wenn ihr das Script bei euch mal testen könnt und mir eine Rückmeldung gebt.
Noch eine kleine Zusatzfrage: Gibt es noch jemanden, der eine nicht-32-Bit-Auflösung benutzt?