TFT Auflösung ändern

  • Moin Anna,

    was ist ein lukas fan ?( bin also keiner, glaube ich :D .

    Das #include <String.au3> brauch ich um das _StringBetween nutzen zu können. Kurz zur Erklärung das _StringBetween ist eine User Defined Function (UDF) da man diese ja mal öfter benötigt werden diese in weiteren AutoIT Dateien ausgelagert, wäre ja doof wenn man immer alles noch mal tippen müsste :). Was macht also das #include es läd quasi die Datei String.au3 mit in dein Skript so das du zwar nicht die genaue Funktion siehst aber sie trozdem benutzen kannst. Es gibt viele von diesen Dateien die bereits mit AutoIT auf dein System kommen, wenn du nun z. B. die String.au3 im Verzeichnis <AutotIT Installationspfad>\Include aufmachst und mal nach _StringBetween suchst, siehst du was diese Funktion genau macht.

    Mfg
    Jens (McPoldy)

    Twitter: jkroeger

    Denn die Dinge, die wir erst lernen müssen, bevor wir sie tun, lernen wir beim Tun.(Aristoteles)

  • So hier noch einmal eine geänderte Version für Anna, sie hatte gefragt ob es auch möglich ist abzufangen wenn eine nicht verfügbare Auflösung angegeben wird. Ich habe mir mal zwei Lösungsansätze überlegt, der erste war, ich könnte das Regler schieben auf ein Maximumwert begrenzen und dann abbrechen, hat mir nicht gefallen. Die zweite ist die ich hier mal bereit stelle, sie ist mittels WMI. Ich schaue erst einmal wieviele Farben ich eingestellt habe und dann noch die Frequenz. Nun prüfe ich ob der eingegebene Wert ein möglicher Wert ist, falls ja wird geändert, falls nein wird eine Meldung ausgegeben.

    Ich habe jetzt nur ein System mit einer Grafikkarte, mich würde interessieren ob es auch bei Leuten geht die zwei haben (eine OnBoard die nicht im Bios deaktiviert wurde und eine PCI-E, AGP,etc.).

    Spoiler anzeigen
    [autoit]


    #include <String.au3>
    Global $Regler_ID = 1808
    Global $Size_ID = 1814
    Global $bt_Uebernehmen = 12321
    Global $bt_OK = 1
    Global $txt
    Global $Width = 1680
    Global $Height = 1050
    Global $CurrentRefreshRate
    Global $CurrentNumberOfColors

    [/autoit] [autoit][/autoit] [autoit]

    If _Aufloesungen($Width,$Height) Then
    _ChangeSettings()
    Else
    MsgBox(48,'Info','Die von Ihnen gewählte Auflösung von ' & $Width & ' X ' & $Height & ' wird nicht unterstützt.',10)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Exit 0

    [/autoit] [autoit][/autoit] [autoit]

    Func _ChangeSettings()
    Run("control.exe DESK.CPL,,3")
    WinWaitActive('Eigenschaften von Anzeige')
    ControlCommand("Eingenschaften von Aneige", "Farbqualität", "ComboBox2", "SelectString", "Mittlere (16 Bit)")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $txt = ControlGetText('Eigenschaften von Anzeige', '', $Size_ID)

    [/autoit] [autoit][/autoit] [autoit]

    While $txt <> $Width & ' x ' & $Height & ' Pixel'
    ;hier hole ich mir der ersten wert von der aktuellen einstellung
    $curWidth = Number(StringStripWS(StringLeft($txt,StringInStr(StringStripWS($txt,3),'x') - 1),3))
    $curHeight = Number(StringStripWS(_StringBetween($txt,'x','Pixel'),3))


    ;ist die aktuelle einstellung grösser dann bitte nach links mit dem regeler
    If $curWidth > $Width Then
    ControlSend('Eigenschaften von Anzeige', '', $Regler_ID, '{LEFT}')
    ;falls kleiner nach rechts
    ElseIf $curWidth < $Width Then
    ControlSend('Eigenschaften von Anzeige', '', $Regler_ID, '{RIGHT}')
    ElseIf $curWidth = $Width AND $curHeight > $Height Then
    ControlSend('Eigenschaften von Anzeige', '', $Regler_ID, '{LEFT}')
    ElseIf $curWidth = $Width AND $curHeight < $Height Then
    ControlSend('Eigenschaften von Anzeige', '', $Regler_ID, '{RIGHT}')
    EndIf
    $txt = ControlGetText('Eigenschaften von Anzeige', '', $Size_ID)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    ControlClick('Eigenschaften von Anzeige', '', $bt_Uebernehmen)
    ControlClick('Eigenschaften von Anzeige', '', $bt_OK)

    [/autoit] [autoit][/autoit] [autoit]

    If WinWaitActive("Monitoreinstellungen", "Sie haben die Auflösung neu konfiguriert. Möchten Sie diese Einstellungen beibehalten?",5) = 1 Then
    ControlClick("Monitoreinstellungen", "Sie haben die Auflösung neu konfiguriert. Möchten Sie diese Einstellungen beibehalten?", "Button2",1)
    ControlClick('Eigenschaften von Anzeige', '', $bt_OK)
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _CurrentSettings()
    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
    $CurrentRefreshRate = $Obj_Item.CurrentRefreshRate
    $CurrentNumberOfColors = $Obj_Item.CurrentNumberOfColors
    Return True
    Next
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _Aufloesungen($HorizontalResolution,$VerticalResolution)
    _CurrentSettings()
    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 where NumberOfColors = "' & $CurrentNumberOfColors & '" AND RefreshRate = "' & $CurrentRefreshRate & '"')

    Local $Obj_Item
    For $Obj_Item In $Col_Items
    If $Obj_Item.HorizontalResolution = $HorizontalResolution And $Obj_Item.VerticalResolution = $VerticalResolution Then Return True
    Next
    EndIf
    Return False
    EndFunc

    [/autoit]

    Mfg
    Jens (McPoldy)

    Twitter: jkroeger

    Denn die Dinge, die wir erst lernen müssen, bevor wir sie tun, lernen wir beim Tun.(Aristoteles)

  • Hallo MC,


    das scheint zu funktionieren.

    Ich werde es auch mal mit 2 Grafikkarten testen und bescheid geben.

    Danke


    Gruß anna

  • :rofl: :rofl: :rofl: :rofl: :rofl: :rofl: :rofl: :rofl: :rofl: :rofl: :rofl: :rofl: :rofl: :rofl: :rofl: :rofl: :rofl: :rofl: :rofl: :rofl: :rofl:

    Ich kannte https://autoit.de/www.gidf.de bisher auch nicht. Aber Dein Kommentar (akira) hat mich neugierig gemacht. Selten so gelacht. Dieser Link kommt gleich zu meinen Favoriten. Oder baue ich ihn in meine Sig ein? hmmm, jedenfalls einfach klasse :)

    Gruß,

    TrueMu
    der sich gerade die Tränen aus den Augen gewischt hat