Hallo. Ich habe mir vor einiger Zeit ein Skript gebastelt womit ich die Auflösung ändern kann. Hintergrund dabei war es, die Auflösung bei anderen Mitarbeitern zu ändern, ohne sich umloggen zu müssen. Mit einem RunAs-Skript habe ich das eigentliche Skript einfach gestartet und dann unter meiner Adminkennung ausgeführt.
Jetzt werden viele Monitore ersetzt durch welche mit Full HD-Auflösung. Habe mein Skript dahingehend erweitert. Bei meinem PC und meinem monitor - 22", etwas älter - funktioniert es einwandfrei. Bei den neuen 27" monitoren jedoch nicht. Zwar kann ich zwischen 1024*768 und 1280*1024 hin und her switchen, aber bei Full HD passiert nichts. Ich vermute dass das an der Frequenz liegt.
Da ich die Funktion selbst nicht geschrieben habe und daher auch nicht ganz durchsteige wollte ich hier um Hilfe bitten.
Hier das Skript:
Spoiler anzeigen
#include <GUIConstants.au3>
#include <File.au3>
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <string.au3>
#include <Array.au3>
#include <GuiStatusBar.au3>
#include <ProgressConstants.au3>
#include <GUIListBox.au3>
#include-once
Global $tmp = "d:\tmp.txt"
Global $atmp
Global $pw = "d:\pw.txt"
Global $apw
Global $pfad = "d:\Installationen.exe"
;~ Dim $abenutzername[4] = ["Benutzer1", "Benutzer2", "Benutzer3"]
Global $domain = "Domäne"
_FileReadToArray($tmp, $atmp)
_FileReadToArray($pw, $apw)
_ArrayDelete($atmp, 0)
_ArrayDelete($apw, 0)
;~ FileDelete($tmp)
;~ FileDelete($pw)
;~ If not FileExists($tmp) Then
;~ MsgBox(0, "FEHLER!", "Programm mit RunAs starten!")
;~ Exit
;~ EndIf
;~ For $i = 1 To Ubound($atmp) - 1 ;für den Fall, das mehr als ein Benutzer in der Datei steht
;~ _ArraySearch($abenutzername, $atmp[$i])
;~ If @error Then
;~ MsgBox(0, "FEHLER!", "Programm mit RunAs starten!")
;~ Exit
;~ EndIf
;~ Next
Run(@ComSpec & " /c " & "net stop spooler", "", @SW_HIDE)
Sleep(2000)
Run(@ComSpec & " /c " & "net start spooler", "", @SW_HIDE)
Opt("GUIOnEventMode", 1)
[/autoit] [autoit][/autoit] [autoit]$Form1 = GUICreate("Installationen", 220, 80, 150, 150)
;von links, von oben, breite, höhe
$Group3 = GUICtrlCreateGroup("Auflösung", 10, 10, 200, 55)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Combo4 = GUICtrlCreateCombo("Auflösung auswählen", 30, 30, 160, 35) ;Bildschirmauflösung
GUICtrlSetData($Combo4, "1024*768|1280*1024|1920*1080", "Auflösung auswählen")
GUICtrlSetOnEvent($Combo4, "Combo4")
GUISetState()
GUISetState(@SW_SHOW)
GUISetOnEvent($GUI_EVENT_CLOSE, "_exit")
GUISetState()
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
;Case $msg = $ButtonDrucker
; MsgBox(0,"Test",GUICtrlRead($cList))
EndSelect
WEnd
Func Combo4()
$read = GUICtrlRead($Combo4)
If $read = "1024*768" Then
aufloesung(1024,768)
EndIf
If $read = "1280*1024" Then
aufloesung(1280,1024)
EndIf
If $read = "1920*1080" Then
aufloesung(1920,1080)
EndIf
EndFunc
Func aufloesung($i_Width = @DesktopWidth, $i_Height = @DesktopHeight, $i_BitsPP = @DesktopDepth, $i_RefreshRate = @DesktopRefresh)
Local Const $DM_PELSWIDTH = 0x00080000
Local Const $DM_PELSHEIGHT = 0x00100000
Local Const $DM_BITSPERPEL = 0x00040000
Local Const $DM_DISPLAYFREQUENCY = 0x00400000
Local Const $CDS_TEST = 0x00000002
Local Const $CDS_UPDATEREGISTRY = 0x00000001
Local Const $DISP_CHANGE_RESTART = 1
Local Const $DISP_CHANGE_SUCCESSFUL = 0
Local Const $HWND_BROADCAST = 0xffff
Local Const $WM_DISPLAYCHANGE = 0x007E
If $i_Width = "" Or $i_Width = -1 Then $i_Width = @DesktopWidth ; default to current setting
If $i_Height = "" Or $i_Height = -1 Then $i_Height = @DesktopHeight ; default to current setting
If $i_BitsPP = "" Or $i_BitsPP = -1 Then $i_BitsPP = @DesktopDepth ; default to current setting
If $i_RefreshRate = "" Or $i_RefreshRate = -1 Then $i_RefreshRate = @DesktopRefresh ; default to current setting
Local $DEVMODE = DllStructCreate("byte[32];int[10];byte[32];int[6]")
Local $B = DllCall("user32.dll", "int", "EnumDisplaySettings", "ptr", 0, "long", 0, "ptr", DllStructGetPtr($DEVMODE))
If @error Then
$B = 0
SetError(1)
Return $B
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, $i_Width, 2)
DllStructSetData($DEVMODE, 4, $i_Height, 3)
DllStructSetData($DEVMODE, 4, $i_BitsPP, 1)
DllStructSetData($DEVMODE, 4, $i_RefreshRate, 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", $i_BitsPP, "int", $i_Height * 2 ^ 16 + $i_Width)
$DEVMODE = ""
Return 1
Case Else
$DEVMODE = ""
SetError(1)
Return $B
EndSelect
EndIf
EndFunc ;==>_ChangeScreenRes
Func _exit()
FileDelete("d:\Installationen.exe")
Exit
EndFunc