Sound so lange abspielen bis MSGBox bestätigt

  • Hallo habe grade folgendes Problem:

    Ich habe mir schon eine GUI gebaut.

    Falls ein bestimmter Fall eintritt soll jetzt ein Neues Benachrichtigugnsfenster aufploppen und gleichzeitig ein Sound abgespielt werden solange bis das Fenster durch das Klicken des OK-Buttons wieder verschwindet,

    Hat irgendjemand eine Idee wie ich das umsetzen kann?

    habe schon foglendes probiert:

    [autoit]

    $antwort = msgbox(0+64, "Neues Fenster","blablabla")

    While $antwort <> 0
    SoundPlay ( "Windows Exclamation.wav" , 1 )
    WEnd

    [/autoit]


    aber leider funktioniert das nicht wirklich so wie ich es mir vorgestellt hab

  • Hast du mal versucht ERST den Sound zu starten und dann die Message Box aufploppen zu lassen?
    Zudem stoppt die Message Box die Ausführung des Skriptes solange bis sie geschlossen wird.
    Es ist durchaus möglich dass so auch der Sound gestoppt wird.

    Wenn der Sound tatsächlich gestoppt wird, dann musst du dir wohl selber eine Message Box basteln.
    Notfalls such mal im Forum hier. Hier hatte jemand mal eine erweiterte Message Box gepostet die du verwenden könnetst.

    LG. Make

  • Wenn den Sound zuerst Starte dann wird die Meldung leider nicht angezeigt, da die Endloschleife ja nciht unterbrochen wird

    ebenso funktioniert nicht:

    [autoit]


    $meldung=0
    While $antwort <> 0

    SoundPlay ( "Windows Exclamation.wav" , 1 )

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

    if $meldung=0 Then
    $antwort = msgbox(0+64, "Neues Fenster","blablabla")
    $meldung=1
    EndIf

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

    WEnd

    [/autoit]
  • Du brauchst überhaupt keine Endlosschleife weil die Message Box das ganze intern selber regelt.
    Du brauchst nur nach dem aufploppen der Message Box den Sound zu stoppen.

    [autoit]

    SoundPlay("Windows Exclamation.wav")
    MsgBox(64, "Neues Fenster", "blablabla")
    SoundPlay("")

    [/autoit]

    So wird der Sound solange abgespielt wie die Message Box zu sehen ist.

  • Hmm...
    Dann würde ich dir die Variante empfehlen wo du dir selber eine Message Box bastelst.
    So schwer ist das nicht und du kannst dein Vorhaben leicht umsetzen.

  • kannst du mir ein bisschen dabei helfen? habe leider wenig erfahrung mit dem Aufbau einer GUI, den Quellcode des Fenters das ich momentan schon drin habe habe ich von einem Beispiel übernommen und nur ein wenig angepasst.
    Damit du einen kuzen Überblick über das Programm ahst hier mal die bisherige Struktur des Programmes:

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

    #Region GUI Aufbau
    Opt("GUIOnEventMode", 1)
    $mainwindow = GUICreate("Programmname", 200, 100)
    GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
    GUICtrlCreateLabel("text...", 30, 10)
    $Statusbutton = GUICtrlCreateButton($status, 70, 50, 60)
    GUICtrlSetBkColor($statusbutton,0xFF0000)
    GUICtrlSetOnEvent($statusbutton, "StatusButton")
    GUISetState(@SW_SHOW)

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

    #Region Hauptroutine

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

    while 1
    ;[...]
    If <Bedingung erfüllt> Then
    ;hier soll das passieren was ich vorhin geschrieben habe.
    EndIf

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

    Wend

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

    #Region ButtonAktionen
    Func StatusButton()
    ;...
    EndFunc

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

    Die Bedingung wird in einer Endlosschleife immer wieder überprüft

    wo genau muss ich jetzt mit dem Aufbau dieses MessageBox Fenster beginnen?

  • Kannst es ja mal so veruschen...
    bin selber noch Neu aber so könnte das klappen... o:
    Musst deine .wav datei halt am selben Ort / Ordner / Desktop haben wie dein Script.

    Spoiler anzeigen
    [autoit]

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

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

    Opt("GUIOnEventMode", 1)

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

    #Region ### START Koda GUI section ### Form=
    $mainwindow = GUICreate("Programmname", 201, 101, 477, 290)
    $Statusbutton = GUICtrlCreateButton("status", 70, 50, 60, 25)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    GUISetOnEvent($GUI_EVENT_CLOSE, "_exit")
    GUICtrlSetOnEvent($statusbutton, "_statusbutton")

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

    while 1
    Sleep (50)
    Wend

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

    Func _StatusButton()
    SoundPlay(@ScriptDir&"\Windows Exclamation.wav")
    MsgBox(64, "Neues Fenster", "Tolle Musik oder? :)")
    SoundPlay("")
    EndFunc

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

    Func _exit()
    Exit
    EndFunc

    [/autoit]

    Wer Rechtschreibfehler findet darf sie behalten. :D

  • Vielen Dank schonmal für deine Hilfe.
    Leider gibt es wieder die selben Probleme wie bei der neuen Idee die ich gerade ausprobiert habe:

    [autoit]


    ;~ AdlibRegister("Soundfunktion",2000)

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

    Func Alarm()
    If $antwort =0 Then
    SoundPlay ( "Windows Exclamation.wav" , 0 )
    EndIf
    EndFunc
    $antwort=0
    msgbox(0+64, "blablabla","test")
    $antwort=1

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

    while 1
    sleep(2000)
    WEnd

    [/autoit]


    Nach mehreren Tests bin ich jetzt zu der Auffassung gekommen dass MsgBox immer alle weiteren Befehle blockiert bis es geschlossen wurde.

    daher sehen jetzt meine weiteren Pläne so aus dass ich entweder den Inhalt des 2. FEnsters in das 1. integriere oder mir 2 GUIs aufbaue.
    Werde dich auf dem laufenden halten ;)

  • Mach es doch so. Die Zeit bei _Timer_SetTimer musst du dann so einstellen, dass es passt mit der Länge des Sounds.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <Timers.au3>

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

    Global $hGui, $cTest

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

    $hGui = GUICreate("Test", 200, 100)
    $cTest = GUICtrlCreateButton("Test", 20, 20, 80, 25)
    GUISetState()

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $cTest
    _Timer_SetTimer($hGui, 1000, "_Sound")
    MsgBox(0, "", "")
    _Timer_KillAllTimers($hGui)
    EndSwitch
    WEnd

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

    Func _Sound($_hWnd, $_iMsg, $_iIDTimer, $_iTime)
    #forceref $_hWnd, $_iMsg, $_iIDTimer, $_iTime
    SoundPlay(@WindowsDir & "\media\chimes.wav")
    EndFunc ;==>_Sound

    [/autoit]
  • [autoit]

    Global Const $SND_ASYNC = 0x01
    Global Const $SND_LOOP = 0x08

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

    PlaySound ("Windows Exclamation.wav", 0, BitOR($SND_LOOP, $SND_ASYNC))
    MsgBox (64, "Neues Fenster", "blablabla")
    PlaySound ("", 0, 0)

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

    Func PlaySound ($pszSound, $hmod, $fdwSound)

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

    Local $ret = DllCall ("Winmm.dll", "BOOL", "PlaySoundW", "wstr", $pszSound, "HANDLE", $hmod, "DWORD", $fdwSound)
    Return $ret[0]

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

    EndFunc

    [/autoit]

    Grüße
    Greenhorn


  • so habe jetzt eine Lösung für mein Problem gefunden: hab es durch 2 GUIS gelöst

    [autoit]

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

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

    $start=0
    $antwort=0
    Opt("GUIOnEventMode", 1) ; Wechsle in den OnEvent Modus

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

    $mainwindow = GUICreate("Angriffswarner", 200, 100)
    $Startbutton = GUICtrlCreateButton("start", 70, 50, 60)
    GUISetState(@SW_SHOW, $mainwindow)
    GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked", $mainwindow)
    GUICtrlSetOnEvent($Startbutton, "StartButton")

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

    $window2 = GUICreate("blabla", 200, 100)
    $bestaetigungbutton = GUICtrlCreateButton("bestätigen", 70, 50, 60)
    GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked", $window2)
    GUISetState(@SW_HIDE, $window2)
    GUICtrlSetOnEvent($bestaetigungbutton, "BestaetigungButton")

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

    while 1
    While $start=1 AND $antwort = 0
    SoundPlay("Windows Exclamation.wav", 1)
    WEnd
    WEnd

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

    Func StartButton()
    $start=1
    GUISetState(@SW_SHOW, $window2)
    EndFunc ;==>StatusButton

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

    Func bestaetigungbutton()
    $start=0
    $antwort = 1
    GUISetState(@SW_HIDE, $window2)

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

    EndFunc ;==>bestaetigungbutton

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

    Func CLOSEClicked()
    Switch @GUI_WinHandle ; See which GUI sent the CLOSE message
    Case $mainwindow
    Exit ; If it was this GUI - we exit <<<<<<<<<<<<<<<
    Case $window2
    $antwort = 1
    $start=0
    GUISetState(@SW_HIDE, $window2)
    EndSwitch

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

    EndFunc

    [/autoit]
  • weil ich festgestellt habe dass es vielelicht gar nicht so schlecht ist ein 2.fenster zu haben dass ich nach belieben ändern und informationen hinzufügen kann

    Greenhorns ist auch sehr gut habe es gerade ausprobiert, leider verstehe ich den quelltext nicht wirklich :(