Video und Programm Starten

  • Guten Tag!

    Ich bin neu hier und Anfänger bei AutoIt (seit heute quasi) also bitte seid mir nicht böse, wenn ich wenig Ahnung habe.

    Ich möchte gerne ein Skript erstellen, das mir beim Aufrufen ein Video in Vollbild apspielt und im Hintergrund ein Programm läd (das braucht ca. 47 Sekunden bis es komplett geladen ist).
    Wenn das Video zuende ist oder man irgendeine Taste Drückt, soll das Video beendet werden.

    Das klingt ziemlich simpel ist aber für mich extrem schwer.
    Ich habe es hinbekommen ein Fenster mit Autoit zu erstellen, das im Vollbildmodus gestartet wird und ein Video läd.
    Dieses wird mittig dargestellt und der rest des Fensters ist schwarz.

    Leider gibt es mehrere Probleme:
    Das Programm wird im Vollbildmodus gestartet.
    Sobald das Script läuft, öffnet es zwar das Video uns spielt es auch ab (man sieht es einen kurzen moment und hört dann nur noch den Ton) aber das andere Programm klemmt sich sozusagen vor das Video.
    Ich sehe also wieder den Ladebildschirm.

    Außerdem beendet sich das Video nicht automatisch (hab nicht gefunden wie das geht) und auch bei Tastenklicks geht es nicht zu.

    Hier ist mein Script:

    Ich hoffe ihr könnt und wollt mir weiterhelfen.

    Vielen Dank!

  • Vielen Dank für die Begrüßung ;)

    Ich habe bereits nach Antworten gesucht, wurde allerdings nicht weiter fündig.
    Im Tutorial habe ich z.B. nur was über Maus- und Tastatursimulation gefunden - nicht aber, wie man bei einem Tastenklick das script beendet.
    Auch ein Video zu starten habe ich nur mit Hilfe von google herrausgefunden.

    Vielleicht ist der Grund, warum ich nichts passendes finde, weil mein Vorhaben etwas spezieller ist.
    Weil ich mit den normalen Mitteln nicht weiter komme frage ich ja hier :)
    Ich habe mir dieses Script da oben zusammengeschrieben und es macht ja zumindest in Ansätzen das was ich will. Leider gibts wie beschrieben ein paar Probleme die ich nicht alleine Lösen kann...

  • Wenn du Misc.au3 includest

    [autoit]

    #include <Misc.au3>

    [/autoit]


    kannst du mit _IsPressed([Taste]) und einer Bedingung sagen, was passieren soll, wenn man zB. Esc drückt.
    Bsp.

    [autoit]

    #include <Misc.au3>
    If _IsPressed("1B") Then Exit

    [/autoit]

    In der Hilfe stehen die Befehle für die Tasten, es sind nicht die dieseblen Befehle wie bei Send()

    Einmal editiert, zuletzt von jojot (17. April 2011 um 10:21)

  • Vielen Dank jojot!

    Ich hab mit deinem Anstoß eine funktionierende Tasten-Beendigung hinbekommen (für alle Tasten).

    Ich werde natürlich, das alles funktionieren sollte, das Ergebnis hier präsentieren, damit andere mit dem gleichen Problem schneller vorran kommen.

    Wie schaffe ich es nun:
    - das GUI zu beenden, wenn das Video zuende ist?
    - das GUI (indem das VIDEO läuft) vor das Fullscreen-Programm zu bekommen?

    LG

  • [autoit]

    #RequireAdmin
    AutoItSetOption ("WinTitleMatchMode", 2)
    ;ein Beispiel am MPC-HC
    ShellExecute ("mpc-hc.exe", "", @ProgramFilesDir & "\MPC HomeCinema")
    WinWait ("Media", "Playlist")
    WinActivate ("Media", "Playlist")
    Send ("{ALTDOWN}"& "{d}" & "{ALTUP}" & "{f}", 0)
    WinWait ("Open", "")
    ;Hier drunter dein Video
    Send ("C:\Was magst DU an Frauen.flv")
    ControlClick ("Open", "", "Button3")
    Sleep (3000)
    ;hier drunter dein Programm - @SW_MINIMIZE funktioniert nicht, verstehe ich auch nicht
    ShellExecute ("firefox.exe", "", @ProgramFilesDir & "\Mozilla Firefox", "", @SW_MINIMIZE)
    Sleep (5000)
    WinActivate ("Media", "Playlist")
    Send ("{ALTDOWN}"& "{w}" & "{ALTUP}" & "{n}" & "{b}", 0)
    Sleep (1000)
    Send ("{CTRLDOWN}" & "{ENTER}" & "{CTRLUP}", 0)
    ;das mit der Tastaturüberwachung würde richtung Keylogger gehen

    [/autoit]

    Einmal editiert, zuletzt von Sentionline (16. April 2011 um 20:10)

  • Danke Sentionline für dein Skript.

    Leider funktioniert das hinten und vorne nicht.
    Der Player wird zwar geöffnet, aber es wird nichts abgespielt (Pfade natürlich angepasst) .
    Klicke ich per hand auf "Play" dann wird das zuletzt gespielte Video abgespielt.
    Das 2. Programm öffnet sich gar nicht.

    Kann man bei AutoIt nicht sagen, das es die GUI nach X Sekunden schließen soll?
    Das wäre zumindest eine Notlösung, wenn man nicht die Videolänge auslesen lassen kann.

  • Hast du auch das Video angegeben? Bei mir läuft der Script auf 2 Rechnern (XP).

  • Hat niemand sonst mehr eine Idee, wie man mein Script das machen lassen kann, was es soll?

    Ich brauche ja jetzt "nur noch" diese zwei Dinge, dass mein Video statt dem eigentlichen Programm sichtbar ist (es läuft, das sieht man, weil es am anfang läd und man hört es, nur das andere Programm "überdeckt" das Video).

    Vielen Dank!

    Einmal editiert, zuletzt von Phil333 (25. April 2011 um 14:54)

  • Leider gibt es mehrere Probleme:
    Das Programm wird im Vollbildmodus gestartet.
    Sobald das Script läuft, öffnet es zwar das Video uns spielt es auch ab (man sieht es einen kurzen moment und hört dann nur noch den Ton) aber das andere Programm klemmt sich sozusagen vor das Video.
    Ich sehe also wieder den Ladebildschirm.

    Außerdem beendet sich das Video nicht automatisch (hab nicht gefunden wie das geht) und auch bei Tastenklicks geht es nicht zu.

    Wenn du das andere Programm nicht sehen willst benutz run mit @SW_MINIMIZE. Was das Beenden angeht... du kannst per Rechtsklick in das Video z.B. die Stopfunktion und Pausefunktion des Players nutzen. Die GUI kannst du grundsätzlich mit der ESC Taste beenden. Sicher kann man durch das WMP Objekt auch auslesen wielange das Video ist und die GUI dann nach erfolgreichem abspielen schliessen lassen, aber ich habe keine Lust danach zu suchen was es da noch alles an Funktionen für dieses Objekt gibt (ich vermute mal .controls.stop() stoppt das Video ist aber nur geraten). Ich hab dir dazu einfach mal einen simplen timer eingebaut der das ganze automatisch nach 10 Sekunden beendet, ist natürlich nur sinnvoll wenn dein Video immer gleich lang ist oder du vorher auf anderem Wege ermitteln kannst wielange das Video geht. Andernfalls such einfach mal nach mehr Infos zur WMPlayer.OCX.

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    $myprog = run("notepad.exe","",@SW_MINIMIZE) ; startet dein Programm minimiert

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

    GuiCreate( "", @DesktopWidth, @DesktopHeight+50, $WS_POPUP, $WS_EX_TOPMOST)
    GUISetBkColor(0)
    GUISetState(@SW_SHOW)

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

    $oWMP = ObjCreate("WMPlayer.OCX")
    $hEmbedd = GUICtrlCreateObj($oWMP, 0, (@DesktopHeight + 50 -720) / 2, 1280, 720)

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

    $oWMP.URL = "S:\test.avi"

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

    With $oWMP
    .settings.volume = 100
    .stretchToFit = True
    .fullscreen = True
    .uiMode = 'none'
    .controls.play()
    EndWith

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

    GUISetState(@SW_SHOW)

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

    $timer = TimerInit() ; speichert die Startzeit
    Do
    $dif = TimerDiff($timer) ; errechnet die aktuelle Laufzeit
    if $dif > 10000 Then ; Beendet das Videofenster nach 10 Sekunden
    Exit
    EndIf
    Until GUIGetMsg() = -3

    [/autoit]
  • Hier nochmals eine überarbeitete Variante, welche sich beendet sobald das Video komplett abgespielt wurde:

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    $myprog = run("notepad.exe","",@SW_MINIMIZE) ; startet dein Programm minimiert

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

    GuiCreate( "", @DesktopWidth, @DesktopHeight+50, $WS_POPUP, $WS_EX_TOPMOST)
    GUISetBkColor(0)
    GUISetState(@SW_SHOW)

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

    $oWMP = ObjCreate("WMPlayer.OCX")
    $hEmbedd = GUICtrlCreateObj($oWMP, 0, (@DesktopHeight + 50 -720) / 2, 1280, 720)

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

    $oWMP.URL = "S:\test.avi"

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

    With $oWMP
    .settings.volume = 100
    .stretchToFit = True
    .fullscreen = True
    .uiMode = 'none'
    .controls.play()
    EndWith

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

    GUISetState(@SW_SHOW)
    $len = $oWMP.currentMedia.Duration() ; liefert 0 wenn das Video noch nicht geladen wurde, du kannst anstelle der Schleife im Anschluss auch eine Pause vor dieser Zeile einbauen.
    While $len < 1 ; prüft die Länge des Videos solange bis keine 0 mehr geliefert wird
    $len = $oWMP.currentMedia.Duration()*1000 ; Länge des Videos in Milisekunden
    WEnd

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

    $timer = TimerInit() ; speichert die Startzeit
    Do
    $dif = TimerDiff($timer) ; errechnet die aktuelle Laufzeit
    if $dif > $len Then ; Beendet das Videofenster sobald die Laufzeit des Videos überschritten wurde
    $oWMP.close() ; schliesst das Player Objekt
    Exit ; beendet die GUI
    EndIf
    Until GUIGetMsg() = -3

    [/autoit]
  • Wow!

    Vielen Dank ihr beiden!
    Ich werde das mal damit versuchen und schauen ob es damit geht.

    Was das Vollbild angeht, weiß ich aber leider, das @SW_MINIMIZE nicht funktioniert, weil ich es schon versucht habe.
    Vielleicht liegt es daran, das es ein "Spiel" ist.
    Es wird also als Vollbild angezeigt und ist weder "klein" noch "im Hintergrund" zu bekommen.
    Ich hab mal irgendwo auf englisch gelesen, das es was mit DirectX zu tun hat, weiß aber weder ob das stimmt, noch ob man es umgehen kann und wie.

    Das ist natürlich auch das größte Problem. Wenn das Video nicht von alleine schließt, dann kann man es mit Esc ja noch weg klicken, aber problematisch ist, wenn man das Video erst gar nicht sieht ;)

    Vielen Dank für eure Hilfe bis hierher und auch für die weitere Hilfe!