Windows 7 - Bildschirm erkennen

  • Hallo zusammen,

    ich habe schon so einige Sachen mit AutoIt gelöst - leider fast alles mit "geklauten" Codeschnipseln :)
    Daher halten sich meine Kenntnisse stark in Grenzen.

    Ich habe jedenfalls einen HTPC, der per AVR an den TV (und per DVI / VGA an einen Beamer) angeschlossen ist.
    Wenn der PC länger im S3 verweilt und / oder man eine "ungünstige" Einschaltreihenfolge der Geräte wählt bleibt der Bildschirm schwarz und lässt sich nur mittels "Desktop" -> "Rechtsklick" -> "Bildschirmauflösung" und dann "erkennen" wieder zum laufen bringen - weiß ich dank einloggen per TeamViewer.

    Alles anderen Lösungswege wie: devcon.exe, "so ne Box, die immer einen aktiven Bildschirm vorgaukelt", verschiedenste ATI-Grafiktreiber getestet, Tools wie HDMI on oder HDMIYo als Sript per Tastendruck ausführen zu lassen, etc, pp, usw..., haben leider keinen Erfolg gebracht.

    Erschwert, bzw. verhäufigt wird die ganze Problematik noch durch was hausgemachtes: Ich habe den PIN 19 am HDMI Kabel abgeklebt, damit Windows beim Wechsel der Quelle am AVR (ohne Standby PassThrough) die Auflösung nicht ändert (was zwangsläufig zu einem Abbruch der Medienabspielung in Mediaportal führt).

    Per AutoIt "Windows Taste + p" zu senden ist mir zu Fehleranfällig
    (Manchmal ist der AVR als Bildschirm angelegt, der Dialog dann auf "nur Computer", meistens aber wie im Normalfall der TV und Beamer und die Einstellung damit auf "Doppelt", jedenfalls zu unkalkulierbar).

    Die Suche (auch per Google) hat mir viele Scripts und Schnipsel geliefert, die aber allesamt für Auflösungsänderungen verantwortlich sind.
    In solch einem Scripts müsste die Lösung doch quasi "nebenan" zu finden sein, jedenfalls wenn man das als menschlicher Benutzer sieht :)

    z.B. hier sowas:

    Spoiler anzeigen

    Oben alles unwichtiges Gerede, daher meine eigentliche Frage:
    Ist es irgendwie möglich den Befehl zu geben, dass der / die Bildschirme neu erkannt werden?

    Zur Not: Kann man oben aufgeführte ("Desktop" -> "Rechtsklick" -> "Bildschirmauflösung" und dann "erkennen") zuverlässig ausführen lassen
    (Mediaportal per Taskkill beenden, "Fokus" auf den Desktop legen, so dass der Rechtsklick auch wirklich das auslöst was er soll, etc.)?

    Ziel ist in jedem Fall, dass ganze dann als eine .exe zu speichern, die per Tastenkombination ausgeführt werden kann (man ist ja "blind").

    Besten Dank im Voraus!

    mfg Balduris

    Einmal editiert, zuletzt von Balduris (28. Februar 2014 um 14:00)

  • Hallo Oscar,

    über den "Umweg" klappt das bei mir auf jeden Fall schon mal. Vielen Dank dafür!
    (2 Tage hat der doofe PC gebraucht um den Bildschirm mal wieder schwarz zu lassen).

    Falls jemand hat oder kennt (es den überhaupt gibt), würde ich trotzdem gerne noch den direkten Befehl zur Erkennung der Bildschirme haben :rolleyes:
    und somit den Thread noch was offen halten - vielleicht fällt ja noch jemandem was ein.

    Ausserdem wollte ich demnächst mein Setup ändern und per HDMI Splitter die Signale vom AVR an Beamer und TV schicken (falls das Budget für den HDMI Beamer "freigegeben" wird).
    Dass wenn nur ein Bildschirm angeschlossen ist, der Befehl mit dem Clone wahrscheinlich auch zum Ziel führen wird ist mir zwar klar, aber ich bin halt ein Angsthase,
    es geht immerhin um den WAF Faktor :whistling:

    Gegen was muss ich das "clone" tauschen um auf "Nur Computer / Hauptmonitor" zu schalten?

  • So könnte mal es lösen. Monitor bei Bedarf via Button zu und/oder abschalten.
    Die Befehle die Du suchst sind verwendet.

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Res_requestedExecutionLevel=asInvoker
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

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

    $MoSwi = GUICreate("Monitorsteuerung", 493, 41, 5, 5)
    $Mo2plus = GUICtrlCreateButton("Monitor 2 zuschalten", 8, 8, 115, 25)
    $Mo2minus = GUICtrlCreateButton("Monitor 2 abschalten", 127, 8, 115, 25)
    $Mo1und2 = GUICtrlCreateButton("nur 2. Monitor", 248, 8, 115, 25)
    $Mo2clonMo1 = GUICtrlCreateButton("Monitorcloning", 368, 8, 115, 25)
    GUISetState(@SW_SHOW)

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

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    Case $msg = $Mo2plus
    run("C:\Windows\System32\DisplaySwitch.exe /extend")
    Case $msg = $Mo2minus
    run("C:\Windows\System32\DisplaySwitch.exe /internal")
    Case $msg = $Mo1und2
    run("C:\Windows\System32\DisplaySwitch.exe /external")
    Case $msg = $Mo2clonMo1
    run("C:\Windows\System32\DisplaySwitch.exe /clone")
    EndSelect
    WEnd

    [/autoit]

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Oscar :
    Ja, eigentlich logisch :) Danke dir für die geduldige Hilfe :thumbup:

    Alina:
    Sehr elegant, das Problem ist, ich sehe ja nichts (der Monitor ist in dem Moment aus).
    Daher müsste ich für eine One-Klick-Lösung (zwingend erforderlich wegen dem WAF) vor deinen Codezeilen noch MediaPortal beenden
    und danach noch ein / zwei Tabs und Enter senden lassen, um die gewünschte Einstellung auszuwählen.

    Ich werde vorerst die "Umweglösung" von Oscar nutzen, selbst wenn nur 1 Bildschirm dran ist (Strom beim Beamer weg etc.) scheint Windows durch das Auslösen des Befehls displayswitch.exe / "XXX" immer eine Erkennung durchzuführen und es funktioniert auch wenn Mediaportal aktiv ist, spart mir noch mal 20 Sekunden.

    Wundert mich nur, dass es den Befehl "Erkennen" so alleine nicht zu geben scheint.

    Interessehalber würde ich euch noch bitten mir zu sagen, wie ich, falls es bei geänderter Config doch noch zu Problemen kommen sollte, folgendes lösen könnte:

    [autoit]

    Run("rundll32.exe shell32.dll,Control_RunDLL desk.cpl")

    [/autoit]

    Nach dem ausführen, erscheint der Dialog der Bildschirmeinstellungen.

    1. Gibt es da eine Alternative zu 11 mal Tab senden um den "Erkennen" Button zu markieren?
    2. Mit dem Drücken von Enter wird der Dialog offensichtlich nur geschlossen, mit welchem Befehl kann ich dann "Erkennen" ausführen lassen?

    Auch wenn ihr dazu nichts mehr wissen solltet, vielen Dank für eure Hilfe!
    Dieses Problem hat mich schon fast wahnsinnig gemacht - vielleicht hätte ich auch früher mal fragen sollen, hätte mir zumindest diese sinnlose HDMI EDID Manager Box erspart .