Winactivate zu träge

  • Hallo zusammen.

    Bin nen AutoIt Neuling uns sitze grad an meinem ersten kleinen Projekt.
    Ziel ist es fünf Video-Player offen zu haben, in denen fünf Videos Synchron gestartet werden, nach einer definierten Zeit gestoppt und wieder gestartet werden.

    Nichts leichter als das, ge?
    Doch beim starten der Videos hackt es schon. Wenn ich einfach:

    Winactivate($title01)
    Send("space")
    Winactivate($title02)
    usw...
    mache starten die Videos mit einer Verzögerung von schätzungsweise 100ms.
    Das klingt nicht viel, da die Inhalte der Videos jedoch aufeinander abgestimmt sind, ist mit einer solchen Verzögerung nicht zu arbeiten.

    Ich habe das gleiche mal mit simulierten alt+Tab sequenzen Probiert, also Player mit Alt+Tab anwählen, Space.Nächsten mit Alt+Tab...
    Da ist die Verzögerung akzeptabel.
    Die Lösung schmeckt mir aber überhaupt nicht: Was wenn man eine weitere Applikation offen hat? Man muss immer vorher die Reihenfolge im Alt+Tab-Fenster wieder so hinbauen, dass die Alt-Tab-Sequenz hinhaut.... Naaarch.... :thumbdown:

    Ich hab versucht die Winactivate zu beschleunigen, und ihm ein Handle des Player als Parameter mit auf den Weg gegeben:
    Das Ergebnis ist das gleiche.

    Die Funktion Winaktivate scheint mir zu langsam.
    An der Hardware kann net liegen: Irgend nen 4-Kern AMD mit 2GB Ram und digge NVidia 9600 irgendwas

    Bitte bitte helft mir, dass ich nicht diesen Alt-Tab-Quatsch machen muss.

    Danke und bis denne,
    Aranha

  • ich hätte das so gemacht

    [autoit]


    ;Hotkeys
    HotKeySet ("{HOME}", "start")
    HotKeySet ("{END}", "killscript")

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

    ;VARIABLEN
    $Path = "C:\Programme\VideoLAN\VLC"
    $Exe = "vlc.exe"
    $NTitle = "VLC media player"
    $TitleA = "player1"
    $TitleB = "player2"
    $TitleC = "player3"
    $TitleD = "player4"
    $TitleE = "player5"

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

    ;Body
    While 1
    Sleep (10)
    WEnd

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

    ;Functionen
    Func start()
    ;Player 1
    Run ($Path & "\" & $Exe)
    WinWaitActive ($NTitle)
    WinMove ($Ntitle, "", 0, 0)
    WinSetTitle ($Ntitle, "", $TitleA)
    Sleep (500)
    ;Player 2
    Run ($Path & "\" & $Exe)
    WinWaitActive ($NTitle)
    WinMove ($Ntitle, "", 419, 0)
    WinSetTitle ($Ntitle, "", $TitleB)
    Sleep (500)
    ;Player 3
    Run ($Path & "\" & $Exe)
    WinWaitActive ($NTitle)
    WinMove ($Ntitle, "", 837, 0)
    WinSetTitle ($Ntitle, "", $TitleC)
    Sleep (500)
    ;Player 4
    Run ($Path & "\" & $Exe)
    WinWaitActive ($NTitle)
    WinMove ($Ntitle, "", 0, 405)
    WinSetTitle ($Ntitle, "", $TitleD)
    Sleep (500)
    ;Player 5
    Run ($Path & "\" & $Exe)
    WinWaitActive ($NTitle)
    WinMove ($Ntitle, "", 425, 405)
    WinSetTitle ($Ntitle, "", $TitleE)
    Sleep (500)
    ;PLAY
    MouseClick ("Left", 43, 61, 1, 1) ;Play 1
    MouseClick ("Left", 459, 62, 1, 1) ;Play 2
    MouseClick ("Left", 880, 58, 1 ,1) ;Play 3
    MouseClick ("Left", 43, 470, 1, 1) ;Play 4
    MouseClick ("Left", 470, 469, 1, 1) ;Play 5
    EndFunc

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

    Func killscript()
    Exit
    EndFunc

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

    ;##End Code##;

    [/autoit]

    Einmal editiert, zuletzt von dpjeezy89 (13. Oktober 2008 um 00:24)

  • Hey!
    Hab Dank für die schnelle Antwort.

    Ich hatte vergessen zwei Dinge zu erwähnen:
    An dem Rechner laufen sechs Displays. Fünf davon haben je einen Player im Fullscreen offen.
    Daher ist die Mausklick-variante leider keine Lösung für mich.

    Aber warte...
    Könnte ich nicht einfach in jedes dumme Player-Fenster reinklicken, und dann Space drücken?
    Das probieren ich morgen mal aus.

    Wie ist denn das mir den Mauspositionen bei Multiscreen Desktops?
    Wenn die alle stumpf nebeneinander liegen?
    Displays haben 1680*1050
    Pixel 0*0 i zweiten Display 1681*0?

    Spiele rum, und meld mich.

    Falls euch noch was einfällt: freu mich drauf was zu hören.

    Lieben Gruß,
    Aranha

  • wäre cool wenn du sagen würdest was für einen player du hast weil mit control click würde das gehen aber nicht jeder player hat ne control id
    und schreib auch mal deinen bildschirm modus ob das erweitert oder nur kopie ist dann kann man weiter kucken

  • Heho.

    Beim Player hab ich bis lang den ALShow.
    Den nehm ich weil er sich im Titel unterscheidet, sprich den Videonamen mit im Titel anführt.
    Bildschirmmodi ist erweitert. Kopie würde ja keinen Sinn machen, da auf den 5 Screens ja unterschiedliche Videos im Fullscreen laufen sollen.

    Spiel mit Opt mal rum.

    Weiter so!

    Vielen Dank und Gruß,
    Aranha

  • mach das so das er schnell die fenster aktiviert mit WinActivate($Title) und send("{SPACE}") ohne delays

  • egal was er macht, es läuft doch alles NACHEINANDER ab ... d.h. er hat in jedem fall nen delay drin.
    wie wäre es mit jeweils 1 script pro player und evtl 1 hauptscript, dass die unterscripte startet.

    passiert natürlich auch nacheinander, aber man könnte ja machen, dass das erste script 10ms wartet, das 2te 8ms usw ...
    oder die scripte werden alle gestartet und warten alle bis zeitpunkt x, wo sie alle anfangen das gleiche auszuführen.

  • hast du schon mal überlegt was mit vitual pc was zu machen?
    weil dar würde es problemm los gehen

  • achja ich hab mal so ein script loader geschrieben der kann 1-8 scripts auf einmal laden wenn jemand will kann ich denn posten

  • Anstatt jedes Fenster anwählen kann man ja zu jedem Player ein Socket eröffnen und über die TCP Remoteschnittstelle des VLC allen über TCPSend direkt nacheinander den Start Befehl Senden. Unterscheiden kannst du sie in dem jeder Player einen eigen Port erhält. Dürfte eigentlich sehr schnell sein. Auf die ms genu wirst du aber die Verschiedenen Instanzen nie Starten. Schlimmstenfalls errechnest du dir einfach das Delay und machst auf die ms genau bevor das eigentliche Video beginnt ein schwarzes Bild so dürfte das ganze auf 1-50ms genau je nach CPU last Startbar sein.

    Würde mich Freuen wenn du schreibst obs geklappt hat.