Schleifenproblem while, do until

  • hi
    ich habe bei meinem programm ein schleifenproblem
    wenn ich abbrehcen will, muss ich abbrechen 2 mal drücken

    Spoiler anzeigen
    [autoit]

    While $abbrechen
    $msg = GUIGetMsg()
    if $id_button = $msg Then
    $abbrechen = false
    EndIf
    Sleep(100)
    If Number($ShowMessage) <= Number(_TimeToTicks()) Then
    $herunterfahren = True
    ExitLoop
    EndIf
    WEnd

    [/autoit]

    um das zu umgehen dacht ich mir, ich mache eine fußgesteuerte schleife, bei der das abfragekriterium immer am ende ist
    aber damit bau ich irgendwie eine endlosschleife und ich kann gar nix mehr machen =(

    Spoiler anzeigen
    [autoit]

    Do
    $msg = GUIGetMsg()
    if $id_button = $msg Then
    $abbrechen = false
    EndIf
    Sleep(100)
    If Number($ShowMessage) <= Number(_TimeToTicks()) Then
    $herunterfahren = True
    ExitLoop
    EndIf
    Until $abbrechen

    [/autoit]
  • Jo bei Do->until und While->Wend machste ungefähr das gegensätzliche (Während/Bis)...
    Aber es wäre wesentlich einfacher wenn du deinen ganzen code schicken könntest...

  • okay =)
    hier

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <EditConstants.au3>
    #include <Constants.au3>
    #include <date.au3>

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

    Global $stunden, $minuten, $sekunden, $radio_zeit, $radio_uhrzeit, $abbrechen, $herunterfahren = False, $id_erster_dp, $id_zweiter_dp, $umrechnen = True
    Global $sound

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

    $id_hauptfenster = GUICreate("Herunterfahren", 256, 256, -1, -1)
    GUISetBkColor(0xFFFFFF)
    GUISetIcon("C:\Users\Achim\Icons\Shutdown.ico")
    TraySetIcon("C:\Users\Achim\Icons\Shutdown.ico")

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

    $id_bild_hintergrund = GUICtrlCreatePic("C:\Users\Achim\Desktop\Neuer Ordner\firestorm.jpg", 0, 176, 256, 80); , 0) ;i hier die ",0"
    GuiCtrlSetState(-1 ,$GUI_DISABLE)

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

    ; erstelle die beschriftungslabels
    $id_label_stunden = GUICtrlCreateLabel("Stunden", 10, 50)
    GUICtrlSetBkColor(-1,0xFFFFFF)
    $id_label_minuten = GUICtrlCreateLabel("Minuten", 60, 50)
    GUICtrlSetBkColor(-1,0xFFFFFF)
    $id_label_sekunden = GUICtrlCreateLabel("Sekunden", 110, 50)
    GUICtrlSetBkColor(-1,0xFFFFFF)

    ;erstelle gruppen
    GuiCtrlCreateGroup("Shutdownzeiten", 5, 10, 240, 80)
    GuiCtrlCreateGroup("Weitere Optionen", 5, 90, 240, 80)

    ;erstelle die eingabefelder
    $id_input_stunden = GuiCtrlCreateInput("", 10, 65, 40, 20, $ES_NUMBER)
    GUICtrlSetLimit(-1, 2, 2) ; nur 2 zahlen
    $id_input_minuten = GuiCtrlCreateInput("", 60, 65, 40, 20, $ES_NUMBER)
    GUICtrlSetLimit(-1, 2, 2) ; nur 2 zahlen
    $id_input_sekunden = GuiCtrlCreateInput("", 110, 65, 40, 20, $ES_NUMBER)
    GUICtrlSetLimit(-1, 2, 2) ; nur 2 zahlen
    $id_button = GuiCtrlCreateButton("Ok", 170, 60, 70)
    $id_radio_zeit = GUICtrlCreateRadio("Zeit", 10, 25)
    GUICtrlSetBkColor(-1,0xFFFFFF)
    GUICtrlSetState($id_radio_zeit, $GUI_CHECKED)
    $id_radio_uhrzeit = GUICtrlCreateRadio("Uhrzeit", 50, 25)
    GUICtrlSetBkColor(-1,0xFFFFFF)
    $id_button_durchsuchen = GUICtrlCreateButton("Eigener Sound", 10, 130)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $id_eigener_sound = GUICtrlCreateInput("", 100, 130, 140)
    GUICtrlSetState(-1, $GUI_DISABLE)

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

    ;erstelle die Checkboxen
    $id_option_sound = GUICtrlCreateCheckbox("Sound beim Herunterfahren (", 10, 105)
    GUICtrlSetBkColor(-1,0xFFFFFF)
    $id_option_eigener = GUICtrlCreateCheckbox(" eigener)", 166, 105)
    GUICtrlSetBkColor(-1,0xFFFFFF)
    GUICtrlSetState(-1, $GUI_DISABLE)

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

    GUISetState ()

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $id_button_durchsuchen
    GUICtrlSetData($id_eigener_sound, FileOpenDialog("Datei öffnen", @ScriptDir, 'Alle Dateien (*.wav)'))
    Case $id_button
    If GuiCtrlRead($id_button) = "Ok" Then
    $stunden = GuiCtrlRead($id_input_stunden)
    $minuten = GuiCtrlRead($id_input_minuten)
    $sekunden = GuiCtrlRead($id_input_sekunden)
    if BitAND(GUICtrlRead($id_radio_uhrzeit), $GUI_Checked) Then
    GUICtrlSetData($id_label_stunden, "HH")
    GUICtrlSetData($id_label_minuten, "MM")
    GUICtrlSetData($id_label_sekunden, "SS")
    $id_erster_dp = GUICtrlCreateLabel(":", 55, 50, 2)
    GUICtrlSetBkColor(-1,0xFFFFFF)
    $id_zweiter_dp = GUICtrlCreateLabel(":", 105, 50, 2)
    GUICtrlSetBkColor(-1,0xFFFFFF)
    ElseIf BitAND(GUICtrlRead($id_radio_zeit), $GUI_Checked) Then
    GUICtrlSetData($id_label_stunden, "Stunden")
    GUICtrlSetData($id_label_minuten, "Minuten")
    GUICtrlSetData($id_label_sekunden, "Sekunden")
    GUICtrlDelete($id_erster_dp)
    GUICtrlDelete($id_zweiter_dp)
    EndIf

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

    if $stunden <> "" Or $minuten <> "" Or $sekunden <> "" Then
    GuiCtrlSetData($id_button, "Abbrechen")
    GUICtrlSetState($id_label_stunden, $GUI_DISABLE)
    GUICtrlSetState($id_label_minuten, $GUI_DISABLE)
    GUICtrlSetState($id_label_sekunden, $GUI_DISABLE)
    GUICtrlSetState($id_input_stunden, $GUI_DISABLE)
    GUICtrlSetState($id_input_minuten, $GUI_DISABLE)
    GUICtrlSetState($id_input_sekunden, $GUI_DISABLE)
    GUICtrlSetState($id_radio_zeit, $GUI_DISABLE)
    GUICtrlSetState($id_radio_uhrzeit, $GUI_DISABLE)
    $abbrechen = True
    $umrechnen = True

    EndIf
    ElseIf GuiCtrlRead($id_button) = "Abbrechen" Then
    GuiCtrlSetData($id_button, "Ok")
    GUICtrlSetState($id_label_stunden, $GUI_ENABLE)
    GUICtrlSetState($id_label_minuten, $GUI_ENABLE)
    GUICtrlSetState($id_label_sekunden, $GUI_ENABLE)
    GUICtrlSetState($id_input_stunden, $GUI_ENABLE)
    GUICtrlSetState($id_input_minuten, $GUI_ENABLE)
    GUICtrlSetState($id_input_sekunden, $GUI_ENABLE)
    GUICtrlSetState($id_radio_zeit, $GUI_ENABLE)
    GUICtrlSetState($id_radio_uhrzeit, $GUI_ENABLE)
    EndIf

    $radio_zeit = BitAND(GUICtrlRead($id_radio_zeit), $GUI_Checked)
    $radio_uhrzeit = BitAND(GUICtrlRead($id_radio_uhrzeit), $GUI_Checked)

    If ($radio_zeit And $umrechnen) Then
    $zeit_gesamt = ($stunden * 3600 + $minuten * 60 + $sekunden)
    $umrechnen = False
    MsgBox(0,"",$zeit_gesamt)
    EndIf

    Case $id_option_sound
    If (GUICtrlRead($id_option_sound) = $GUI_CHECKED) Then
    GUICtrlSetState($id_option_eigener, $GUI_ENABLE)
    Else
    GUICtrlSetState($id_option_eigener, $GUI_DISABLE)
    GUICtrlSetState($id_button_durchsuchen, $GUI_DISABLE)
    EndIf

    Case $id_option_eigener
    If ((GUICtrlRead($id_option_sound) = $GUI_CHECKED) AND (GUICtrlRead($id_option_eigener) = $GUI_CHECKED)) Then
    GUICtrlSetState($id_button_durchsuchen, $GUI_ENABLE)
    Else
    GUICtrlSetState($id_button_durchsuchen, $GUI_DISABLE)
    EndIf

    EndSwitch


    if ($radio_uhrzeit And $abbrechen = True) Then ; ---------------------------------------------- Uhrzeit
    if ($stunden = "") Then
    $stunden = 0
    GUICtrlSetData($id_input_stunden, "00")
    EndIf
    if ($minuten = "") Then
    $minuten = 0
    GUICtrlSetData($id_input_minuten, "00")
    EndIf
    if ($sekunden = "") Then
    $sekunden = 0
    GUICtrlSetData($id_input_sekunden, "00")
    EndIf

    $ShowMessage = $stunden&":"&$minuten&":"&$sekunden ;HH:MM:SS
    $ShowMessage = StringSplit($ShowMessage, ":")
    $ShowMessage = _TimeToTicks($ShowMessage[1], $ShowMessage[2], $ShowMessage[3])
    While $abbrechen
    $msg = GUIGetMsg()
    if $id_button = $msg Then
    $abbrechen = false
    EndIf
    Sleep(100)
    If Number($ShowMessage) <= Number(_TimeToTicks()) Then
    $herunterfahren = True
    ExitLoop
    EndIf
    WEnd
    Global $Hour, $Min, $Sec
    _TicksToTime($ShowMessage,$Hour,$Min,$Sec)

    ElseIf ($radio_zeit And $abbrechen = True) Then ; -------------------------------------------- Ablaufzeit

    if ($stunden = "") Then
    $stunden = 0
    GUICtrlSetData($id_input_stunden, "00")
    EndIf
    if ($minuten = "") Then
    $minuten = 0
    GUICtrlSetData($id_input_minuten, "00")
    EndIf
    if ($sekunden = "") Then
    $sekunden = 0
    GUICtrlSetData($id_input_sekunden, "00")
    EndIf

    While $abbrechen
    $msg = GUIGetMsg()
    if $id_button = $msg Then
    $abbrechen = False
    EndIf
    WEnd

    EndIf ; -------------------------------------------------------------------------------------- If-Ende

    If ($herunterfahren = True) Then ; ----------------------------------------------------------- Herunterfahrblock
    If GUICtrlRead($id_option_sound) = $GUI_CHECKED Then
    SoundPlay("shut.wav", 1)
    EndIf

    Exit
    EndIf


    Wend

    [/autoit]
  • So hab ma dein Abbrechen-prob gelöst, bin aber zu faul und müde um den andren kram zu fixen ;) gn8

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <EditConstants.au3>
    #include <Constants.au3>
    #include <date.au3>

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

    Global $stunden, $minuten, $sekunden, $radio_zeit, $radio_uhrzeit, $abbrechen, $herunterfahren = False, $id_erster_dp, $id_zweiter_dp, $umrechnen = True
    Global $sound

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

    $id_hauptfenster = GUICreate("Herunterfahren", 256, 256, -1, -1)
    GUISetBkColor(0xFFFFFF)
    GUISetIcon("C:\Users\Achim\Icons\Shutdown.ico")
    TraySetIcon("C:\Users\Achim\Icons\Shutdown.ico")

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

    $id_bild_hintergrund = GUICtrlCreatePic("C:\Users\Achim\Desktop\Neuer Ordner\firestorm.jpg", 0, 176, 256, 80); , 0) ;i hier die ",0"
    GuiCtrlSetState(-1 ,$GUI_DISABLE)

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

    ; erstelle die beschriftungslabels
    $id_label_stunden = GUICtrlCreateLabel("Stunden", 10, 50)
    GUICtrlSetBkColor(-1,0xFFFFFF)
    $id_label_minuten = GUICtrlCreateLabel("Minuten", 60, 50)
    GUICtrlSetBkColor(-1,0xFFFFFF)
    $id_label_sekunden = GUICtrlCreateLabel("Sekunden", 110, 50)
    GUICtrlSetBkColor(-1,0xFFFFFF)

    ;erstelle gruppen
    GuiCtrlCreateGroup("Shutdownzeiten", 5, 10, 240, 80)
    GuiCtrlCreateGroup("Weitere Optionen", 5, 90, 240, 80)

    ;erstelle die eingabefelder
    $id_input_stunden = GuiCtrlCreateInput("", 10, 65, 40, 20, $ES_NUMBER)
    GUICtrlSetLimit(-1, 2, 2) ; nur 2 zahlen
    $id_input_minuten = GuiCtrlCreateInput("", 60, 65, 40, 20, $ES_NUMBER)
    GUICtrlSetLimit(-1, 2, 2) ; nur 2 zahlen
    $id_input_sekunden = GuiCtrlCreateInput("", 110, 65, 40, 20, $ES_NUMBER)
    GUICtrlSetLimit(-1, 2, 2) ; nur 2 zahlen
    $id_button = GuiCtrlCreateButton("Ok", 170, 60, 70)
    $id_radio_zeit = GUICtrlCreateRadio("Zeit", 10, 25)
    GUICtrlSetBkColor(-1,0xFFFFFF)
    GUICtrlSetState($id_radio_zeit, $GUI_CHECKED)
    $id_radio_uhrzeit = GUICtrlCreateRadio("Uhrzeit", 50, 25)
    GUICtrlSetBkColor(-1,0xFFFFFF)
    $id_button_durchsuchen = GUICtrlCreateButton("Eigener Sound", 10, 130)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $id_eigener_sound = GUICtrlCreateInput("", 100, 130, 140)
    GUICtrlSetState(-1, $GUI_DISABLE)

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

    ;erstelle die Checkboxen
    $id_option_sound = GUICtrlCreateCheckbox("Sound beim Herunterfahren (", 10, 105)
    GUICtrlSetBkColor(-1,0xFFFFFF)
    $id_option_eigener = GUICtrlCreateCheckbox(" eigener)", 166, 105)
    GUICtrlSetBkColor(-1,0xFFFFFF)
    GUICtrlSetState(-1, $GUI_DISABLE)

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

    GUISetState ()

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $id_button_durchsuchen
    GUICtrlSetData($id_eigener_sound, FileOpenDialog("Datei öffnen", @ScriptDir, 'Alle Dateien (*.wav)'))
    Case $id_radio_uhrzeit
    GUICtrlSetData($id_label_stunden, "HH")
    GUICtrlSetData($id_label_minuten, "MM")
    GUICtrlSetData($id_label_sekunden, "SS")
    $id_erster_dp = GUICtrlCreateLabel(":", 55, 50, 2)
    GUICtrlSetBkColor(-1,0xFFFFFF)
    $id_zweiter_dp = GUICtrlCreateLabel(":", 105, 50, 2)
    GUICtrlSetBkColor(-1,0xFFFFFF)
    Case $id_radio_zeit
    GUICtrlSetData($id_label_stunden, "Stunden")
    GUICtrlSetData($id_label_minuten, "Minuten")
    GUICtrlSetData($id_label_sekunden, "Sekunden")
    GUICtrlDelete($id_erster_dp)
    GUICtrlDelete($id_zweiter_dp)
    Case $id_button
    If GuiCtrlRead($id_button) = "Ok" Then
    $stunden = GuiCtrlRead($id_input_stunden)
    $minuten = GuiCtrlRead($id_input_minuten)
    $sekunden = GuiCtrlRead($id_input_sekunden)
    if ($stunden = "") Then
    $stunden = 0
    GUICtrlSetData($id_input_stunden, "00")
    EndIf
    if ($minuten = "") Then
    $minuten = 0
    GUICtrlSetData($id_input_minuten, "00")
    EndIf
    if ($sekunden = "") Then
    $sekunden = 0
    GUICtrlSetData($id_input_sekunden, "00")
    EndIf
    if $stunden <> "" Or $minuten <> "" Or $sekunden <> "" Then
    GuiCtrlSetData($id_button, "Abbrechen")
    GUICtrlSetState($id_label_stunden, $GUI_DISABLE)
    GUICtrlSetState($id_label_minuten, $GUI_DISABLE)
    GUICtrlSetState($id_label_sekunden, $GUI_DISABLE)
    GUICtrlSetState($id_input_stunden, $GUI_DISABLE)
    GUICtrlSetState($id_input_minuten, $GUI_DISABLE)
    GUICtrlSetState($id_input_sekunden, $GUI_DISABLE)
    GUICtrlSetState($id_radio_zeit, $GUI_DISABLE)
    GUICtrlSetState($id_radio_uhrzeit, $GUI_DISABLE)
    $umrechnen = True
    If GuiCtrlGetState($radio_uhrzeit) = $Gui_Checked Then
    $ShowMessage = $stunden&":"&$minuten&":"&$sekunden ;HH:MM:SS
    $ShowMessage = StringSplit($ShowMessage, ":")
    $ShowMessage = _TimeToTicks($ShowMessage[1], $ShowMessage[2], $ShowMessage[3])
    While GuiCtrlRead($id_button) = "Abbrechen"
    $msg = GUIGetMsg()
    if $id_button = $msg Then
    $abbrechen = false
    EndIf
    Sleep(100)
    If Number($ShowMessage) <= Number(_TimeToTicks()) Then
    $herunterfahren = True
    ExitLoop
    EndIf
    WEnd
    Global $Hour, $Min, $Sec
    _TicksToTime($ShowMessage,$Hour,$Min,$Sec)
    EndIf
    EndIf
    ElseIf GuiCtrlRead($id_button) = "Abbrechen" Then
    GuiCtrlSetData($id_button, "Ok")
    GUICtrlSetState($id_label_stunden, $GUI_ENABLE)
    GUICtrlSetState($id_label_minuten, $GUI_ENABLE)
    GUICtrlSetState($id_label_sekunden, $GUI_ENABLE)
    GUICtrlSetState($id_input_stunden, $GUI_ENABLE)
    GUICtrlSetState($id_input_minuten, $GUI_ENABLE)
    GUICtrlSetState($id_input_sekunden, $GUI_ENABLE)
    GUICtrlSetState($id_radio_zeit, $GUI_ENABLE)
    GUICtrlSetState($id_radio_uhrzeit, $GUI_ENABLE)
    EndIf

    $radio_zeit = BitAND(GUICtrlRead($id_radio_zeit), $GUI_Checked)
    $radio_uhrzeit = BitAND(GUICtrlRead($id_radio_uhrzeit), $GUI_Checked)

    If ($radio_zeit And $umrechnen) Then
    $zeit_gesamt = ($stunden * 3600 + $minuten * 60 + $sekunden)
    $umrechnen = False
    ;~ MsgBox(0,"",$zeit_gesamt)
    EndIf

    Case $id_option_sound
    If (GUICtrlRead($id_option_sound) = $GUI_CHECKED) Then
    GUICtrlSetState($id_option_eigener, $GUI_ENABLE)
    Else
    GUICtrlSetState($id_option_eigener, $GUI_DISABLE)
    GUICtrlSetState($id_button_durchsuchen, $GUI_DISABLE)
    EndIf

    Case $id_option_eigener
    If ((GUICtrlRead($id_option_sound) = $GUI_CHECKED) AND (GUICtrlRead($id_option_eigener) = $GUI_CHECKED)) Then
    GUICtrlSetState($id_button_durchsuchen, $GUI_ENABLE)
    Else
    GUICtrlSetState($id_button_durchsuchen, $GUI_DISABLE)
    EndIf

    EndSwitch

    If ($herunterfahren = True) Then ; ----------------------------------------------------------- Herunterfahrblock
    If GUICtrlRead($id_option_sound) = $GUI_CHECKED Then
    SoundPlay("shut.wav", 1)
    EndIf

    Exit
    EndIf
    Wend

    [/autoit]
  • also mich interessiert dein script sehr, wenn es das ist, wonach es beim schnellen überfliegen aussieht.

    könntest du das villeicht posten wenn's fertig ist?

    lg
    Canyon

  • mal noch ne frage an crayon
    die abfrage mit TimeToTicks ist ja nun mit im switch-case
    heißt das, dass das programm nur das mit der abfrage macht, wenn er in $id_button geht?
    also muss die abfrage in die permanente while 1 schleife?
    weil irgendwie funktioniert das nicht mehr :S

  • tut mir leid, aber ich hab seeeehr wenig geschlafen und bin momentan leider nicht in der lage, dir das zu beantworten.

    aber ich bin mir sicher du kennst dein script besser als ich, im zweifelsfall einfach ausprobieren.

    lg
    Canyon

    PS: Ab morgen wieder voll befragbar

  • so hab ein bisschen weiter geschrieben
    das mit dem countdown ging nicht, weil vor der radiobuttonprüfung das BITAND gefehlt hat

    aber nächstes problem
    ich komm schon wieder nicht aus meiner schleife raus XD
    habs aber so gemacht wie mit der anderen schleife

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <EditConstants.au3>
    #include <Constants.au3>
    #include <date.au3>
    #include <SendMessage.au3>

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

    Global $stunden, $minuten, $sekunden, $radio_zeit, $radio_uhrzeit, $herunterfahren = False, $id_erster_dp, $id_zweiter_dp, $umrechnen = True
    Global $sound, $zeit_gesamt = -1

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

    $id_hauptfenster = GUICreate("Herunterfahren", 256, 256, -1, -1)
    GUISetBkColor(0xFFFFFF)
    GUISetIcon("C:\Users\Achim\Icons\Shutdown.ico")
    TraySetIcon("C:\Users\Achim\Icons\Shutdown.ico")

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

    $id_bild_hintergrund = GUICtrlCreatePic("C:\Users\Achim\Desktop\Neuer Ordner\firestorm.jpg", 0, 176, 80, 80); , 0) ;i hier die ",0"
    GuiCtrlSetState(-1 ,$GUI_DISABLE)

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

    ; erstelle die beschriftungslabels
    $id_label_stunden = GUICtrlCreateLabel("Stunden", 10, 50)
    GUICtrlSetBkColor(-1,0xFFFFFF)
    $id_label_minuten = GUICtrlCreateLabel("Minuten", 60, 50)
    GUICtrlSetBkColor(-1,0xFFFFFF)
    $id_label_sekunden = GUICtrlCreateLabel("Sekunden", 110, 50)
    GUICtrlSetBkColor(-1,0xFFFFFF)

    ;erstelle gruppen
    GuiCtrlCreateGroup("Shutdownzeiten", 5, 10, 240, 80)
    GuiCtrlCreateGroup("Sound Optionen", 5, 90, 240, 80)
    GuiCtrlCreateGroup("Weitere Optionen", 80, 170, 165, 80) ; left, top; width, height

    ;erstelle die eingabefelder
    $id_input_stunden = GuiCtrlCreateInput("", 10, 65, 40, 20, $ES_NUMBER)
    GUICtrlSetLimit(-1, 2, 2) ; nur 2 zahlen
    $id_input_minuten = GuiCtrlCreateInput("", 60, 65, 40, 20, $ES_NUMBER)
    GUICtrlSetLimit(-1, 2, 2) ; nur 2 zahlen
    $id_input_sekunden = GuiCtrlCreateInput("", 110, 65, 40, 20, $ES_NUMBER)
    GUICtrlSetLimit(-1, 2, 2) ; nur 2 zahlen
    $id_button = GuiCtrlCreateButton("Ok", 170, 60, 70)
    $id_radio_zeit = GUICtrlCreateRadio("Zeit", 10, 25)
    GUICtrlSetBkColor(-1,0xFFFFFF)
    GUICtrlSetState($id_radio_zeit, $GUI_CHECKED)
    $id_radio_uhrzeit = GUICtrlCreateRadio("Uhrzeit", 50, 25)
    GUICtrlSetBkColor(-1,0xFFFFFF)
    $id_button_durchsuchen = GUICtrlCreateButton("Eigener Sound", 10, 130)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $id_eigener_sound = GUICtrlCreateInput("", 100, 130, 140)
    GUICtrlSetState(-1, $GUI_DISABLE)

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

    ;erstelle die Checkboxen
    $id_option_sound = GUICtrlCreateCheckbox("Sound beim Herunterfahren", 10, 105)
    GUICtrlSetBkColor(-1,0xFFFFFF)
    $id_option_eigener = GUICtrlCreateCheckbox(" (eigener)", 180, 105)
    GUICtrlSetBkColor(-1,0xFFFFFF)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $id_monitor_ausschalten = GUICtrlCreateCheckbox("Monitor ausschalten", 90, 185)

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

    GUISetState ()

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

    While 1 ; -------------------------------------------------------------------------------------- vorerst immer
    $msg = GUIGetMsg()
    Switch $msg ; ------------------------------------------------------------------------------ switch: switch-case mit fensterabfragen ----------------------------------------------------
    Case $GUI_EVENT_CLOSE ; ---------------------------------------------------------------- case: wenn schließen gedrückt wurde
    Exit
    Case $id_radio_uhrzeit ; --------------------------------------------------------------- case: wenn der Radiobutton Uhrzeit gedrückt wurde
    GUICtrlSetData($id_label_stunden, "HH")
    GUICtrlSetData($id_label_minuten, "MM")
    GUICtrlSetData($id_label_sekunden, "SS")
    $id_erster_dp = GUICtrlCreateLabel(":", 55, 50, 2)
    GUICtrlSetBkColor(-1,0xFFFFFF)
    $id_zweiter_dp = GUICtrlCreateLabel(":", 105, 50, 2)
    GUICtrlSetBkColor(-1,0xFFFFFF)
    Case $id_radio_zeit ; ------------------------------------------------------------------ case: wenn der Radiobutton Zeit gedrückt wurde
    GUICtrlSetData($id_label_stunden, "Stunden")
    GUICtrlSetData($id_label_minuten, "Minuten")
    GUICtrlSetData($id_label_sekunden, "Sekunden")
    GUICtrlDelete($id_erster_dp)
    GUICtrlDelete($id_zweiter_dp)
    Case $id_button_durchsuchen ; ---------------------------------------------------------- case: wenn der Button "Datei öffnen" gedrückt wurde
    GUICtrlSetData($id_eigener_sound, FileOpenDialog("Datei öffnen", @ScriptDir, 'Alle Dateien (*.wav)'))
    Case $id_button ; ---------------------------------------------------------------------- case: Abfrage des Buttons "Ok" oder "Abbrechen"
    If GuiCtrlRead($id_button) = "Ok" Then ; ------------------------------------------------- if: wenn der Ok button gedrückt wurde
    $stunden = GuiCtrlRead($id_input_stunden)
    $minuten = GuiCtrlRead($id_input_minuten)
    $sekunden = GuiCtrlRead($id_input_sekunden)
    if ($stunden = "") Then ; wenn feld leer gelassen wurde
    $stunden = 0
    GUICtrlSetData($id_input_stunden, "0")
    EndIf
    if ($minuten = "") Then ; wenn feld leer gelassen wurde
    $minuten = 0
    GUICtrlSetData($id_input_minuten, "0")
    EndIf
    if ($sekunden = "") Then ; wenn feld leed gelassen wurde
    $sekunden = 0
    GUICtrlSetData($id_input_sekunden, "0")
    EndIf
    if $stunden <> "" Or $minuten <> "" Or $sekunden <> "" Then ; wenn in mindestens ein feld etwas steht (bzw. alle ungleich "nix")
    GuiCtrlSetData($id_button, "Abbrechen"); benenne um auf abbrechen
    GUICtrlSetState($id_label_stunden, $GUI_DISABLE); |
    GUICtrlSetState($id_label_minuten, $GUI_DISABLE); |
    GUICtrlSetState($id_label_sekunden, $GUI_DISABLE); |
    GUICtrlSetState($id_input_stunden, $GUI_DISABLE); | alle felder deaktivieren
    GUICtrlSetState($id_input_minuten, $GUI_DISABLE); |
    GUICtrlSetState($id_input_sekunden, $GUI_DISABLE); |
    GUICtrlSetState($id_radio_zeit, $GUI_DISABLE); |
    GUICtrlSetState($id_radio_uhrzeit, $GUI_DISABLE); |
    GuiCtrlsetColor($id_input_sekunden, 0xFF0000)
    GuiCtrlsetColor($id_input_minuten, 0xFF0000)
    GuiCtrlsetColor($id_input_stunden, 0xFF0000)
    $umrechnen = True
    If BitAND(GUICtrlRead($id_radio_uhrzeit), $GUI_Checked) Then ; wenn der Button Uhrzeit angewählt wurde
    $ShowMessage = $stunden&":"&$minuten&":"&$sekunden ;HH:MM:SS (leserlich)
    $ShowMessage = StringSplit($ShowMessage, ":") ; entferne :
    $ShowMessage = _TimeToTicks($ShowMessage[1], $ShowMessage[2], $ShowMessage[3])
    While GuiCtrlRead($id_button) = "Abbrechen"; --------------------------------------- while: mache solange bis der "abbrechen"-button gedrückt wurde
    $msg = GUIGetMsg()
    Sleep(100)
    If Number($ShowMessage) <= Number(_TimeToTicks()) Then ; wenn die aktuelle Uhrzeit die der aktuellen Uhrzeit
    $herunterfahren = True ; wenn ja setze herunterfahrvariable auf true
    ExitLoop ; breche danach die schleife ab
    EndIf
    WEnd
    Global $Hour, $Min, $Sec
    _TicksToTime($ShowMessage,$Hour,$Min,$Sec)
    EndIf
    If BitAND(GUICtrlRead($id_radio_zeit), $GUI_Checked) Then
    $radio_zeit = BitAND(GUICtrlRead($id_radio_zeit), $GUI_Checked)
    If ($radio_zeit And $umrechnen) Then
    $zeit_gesamt = ($stunden * 3600 + $minuten * 60 + $sekunden) ; eingegebene zeit in sekunden
    $umrechnen = False ; danach nicht mehr umrechnen
    EndIf
    While GuiCtrlRead($id_button) = "Abbrechen"; --------------------------------------- while: mache solange bis der "abbrechen"-button gedrückt wurde
    $msg = GUIGetMsg()
    Sleep(1000)

    $sekunden = GUICtrlRead($id_input_sekunden) ; sekundenfeld auslesen und in sekunden speichern
    $minuten = GUICtrlRead($id_input_minuten) ; minutenfeld auslesen und in minuten speichern
    $stunden = GUICtrlRead($id_input_stunden) ; stundenfeld auslesen und in stunden speichern

    If $sekunden <> 0 Then ; ------------------------- wenn sekunden alles andere als 0 sind
    $sekunden = $sekunden -1 ; ziehe eine sekunde ab
    GUICtrlSetData($id_input_sekunden, $sekunden) ; und speichere sie ins feld
    Else ; wenn sie 0 ist
    if BitAND(GUICtrlRead($id_monitor_ausschalten), $GUI_Checked) Then ; jedes mal wenn eine minute runterzählt monitor ausschalten
    monitor_ausschalten()
    EndIf
    $sekunden = 59 ; schreibe 59 als sekunden
    If $minuten <> 0 Then ; wenn die minuten ungleich 0 sind und sekunden auf 59 geschalten
    $minuten = $minuten -1 ; ziehe eine minute ab
    GUICtrlSetData($id_input_minuten, $minuten); und speichere sie ins minutenfeld
    Else ; wenn sekunden auf 59 ging und minuten auf 0 war
    $minuten = 59 ; schreibe 59 ins minutenfeld
    GUICtrlSetData($id_input_minuten, $minuten)
    If $stunden <> 0 Then ; wenn die stunde ungleich 0 ist
    $stunden = $stunden -1 ; ziehe eine stunde ab wenn minuten auf 59 ging
    GUICtrlSetData($id_input_stunden, $stunden) ; und speichere in stunden
    EndIf
    EndIf
    GUICtrlSetData($id_input_sekunden, $sekunden) ; speichere 59 sekunden ins sekundenfeld
    EndIf ; ------------------------------------------- endif

    If ($sekunden = 0 AND $minuten = 0 AND $stunden = 0) Then ; wenn alle 3 felder 0 sind
    $herunterfahren = True
    ExitLoop
    EndIf
    WEnd
    EndIf
    EndIf
    ElseIf GuiCtrlRead($id_button) = "Abbrechen" Then ; ------------------------------------------ elseif: wenn abbrechen gedrückt wurde
    GuiCtrlSetData($id_button, "Ok"); bennene um auf ok
    GUICtrlSetState($id_label_stunden, $GUI_ENABLE); |
    GUICtrlSetState($id_label_minuten, $GUI_ENABLE); |
    GUICtrlSetState($id_label_sekunden, $GUI_ENABLE); |
    GUICtrlSetState($id_input_stunden, $GUI_ENABLE); | alle felder aktivieren
    GUICtrlSetState($id_input_minuten, $GUI_ENABLE); |
    GUICtrlSetState($id_input_sekunden, $GUI_ENABLE); |
    GUICtrlSetState($id_radio_zeit, $GUI_ENABLE); |
    GUICtrlSetState($id_radio_uhrzeit, $GUI_ENABLE); |
    EndIf ; ------------------------------------------------------------------------------------ ifende

    ;~ $radio_uhrzeit = BitAND(GUICtrlRead($id_radio_uhrzeit), $GUI_Checked)

    Case $id_option_sound ; ---------------------------------------------------------------- case: wenn die checkbox "spiele sound" gedrückt wurde
    If (GUICtrlRead($id_option_sound) = $GUI_CHECKED) Then ; spiele sound? wenn ja
    GUICtrlSetState($id_option_eigener, $GUI_ENABLE); aktiviere die "eigenen sound"-checkbox
    Else ; wenn unchecked
    GUICtrlSetState($id_option_eigener, $GUI_DISABLE) ; deaktiviere die "eigenen sound"-checkbox
    GUICtrlSetState($id_button_durchsuchen, $GUI_DISABLE); disable auch den durchsuchen button, der sich aktiviert wenn man eigenen sound anchecked
    EndIf

    Case $id_option_eigener; --------------------------------------------------------------- case: wenn die checkbox "eigener sound" gedrückt wurde
    If ((GUICtrlRead($id_option_sound) = $GUI_CHECKED) AND (GUICtrlRead($id_option_eigener) = $GUI_CHECKED)) Then ; aktiviere nur wenn auch der "spiele sound" gecheckt ist
    GUICtrlSetState($id_button_durchsuchen, $GUI_ENABLE)
    Else
    GUICtrlSetState($id_button_durchsuchen, $GUI_DISABLE)
    EndIf

    EndSwitch ; -------------------------------------------------------------------------------- switch: ende -----------------------------------------------------------------------------

    If ($herunterfahren = True) Then ; --------------------------------------------------------- Herunterfahrblock
    If GUICtrlRead($id_option_sound) = $GUI_CHECKED Then ; sound spielen?
    If (GUICtrlRead($id_option_eigener) = $GUI_CHECKED And GUICtrlRead($id_eigener_sound)) Then ; eigener?
    $neuer_sound = GUICtrlRead($id_eigener_sound)
    SoundPlay($neuer_sound, 1)
    Else ; wenn kein eigener
    SoundPlay("shut.wav", 1) ; standardsound
    EndIf
    EndIf
    Exit
    EndIf ; ------------------------------------------------------------------------------------ Ende Herunterfahrblock

    Wend

    Func monitor_ausschalten()
    Local Const $Off = 2, $On = -1

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

    Opt("WinTitleMatchMode", 4)
    $hwnd = WinGetHandle('classname=Progman')
    _ToggleMonitor($hWnd, $Off)
    ;Sleep ( 20000 )
    _ToggleMonitor($hWnd, $On)
    EndFunc

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

    Func _ToggleMonitor($hwnd, $OnOff)
    Local Const $WM_SYSCOMMAND = 274
    Local Const $SC_MONITORPOWER = 61808
    _SendMessage($hWnd, $WM_SYSCOMMAND, $SC_MONITORPOWER, $OnOff)
    If @error Then
    MsgBox(0,"_ToggleMonitor", "_SendMessage Error: " & @error)
    Exit
    EndIf
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von achim89 (23. März 2009 um 20:53)

  • Das sollte dir einen Schubs in die richtige Richtung geben ;)

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <EditConstants.au3>
    #include <Constants.au3>
    #include <date.au3>

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

    Global $stunden, $minuten, $sekunden, $radio_zeit, $radio_uhrzeit, $herunterfahren = False, $id_erster_dp, $id_zweiter_dp, $umrechnen = True
    Global $sound, $zeit_gesamt = -1

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

    $id_hauptfenster = GUICreate("Herunterfahren", 256, 256, -1, -1)
    GUISetBkColor(0xFFFFFF)
    GUISetIcon("C:\Users\Achim\Icons\Shutdown.ico")
    TraySetIcon("C:\Users\Achim\Icons\Shutdown.ico")

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

    $id_bild_hintergrund = GUICtrlCreatePic("C:\Users\Achim\Desktop\Neuer Ordner\firestorm.jpg", 0, 176, 256, 80); , 0) ;i hier die ",0"
    GuiCtrlSetState(-1 ,$GUI_DISABLE)

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

    ; erstelle die beschriftungslabels
    $id_label_stunden = GUICtrlCreateLabel("Stunden", 10, 50)
    GUICtrlSetBkColor(-1,0xFFFFFF)
    $id_label_minuten = GUICtrlCreateLabel("Minuten", 60, 50)
    GUICtrlSetBkColor(-1,0xFFFFFF)
    $id_label_sekunden = GUICtrlCreateLabel("Sekunden", 110, 50)
    GUICtrlSetBkColor(-1,0xFFFFFF)

    ;erstelle gruppen
    GuiCtrlCreateGroup("Shutdownzeiten", 5, 10, 240, 80)
    GuiCtrlCreateGroup("Sound Optionen", 5, 90, 240, 80)
    GuiCtrlCreateGroup("Weitere Optionen", 80, 170, 165, 80) ; left, top; width, height

    ;erstelle die eingabefelder
    $id_input_stunden = GuiCtrlCreateInput("", 10, 65, 40, 20, $ES_NUMBER)
    GUICtrlSetLimit(-1, 2, 2) ; nur 2 zahlen
    $id_input_minuten = GuiCtrlCreateInput("", 60, 65, 40, 20, $ES_NUMBER)
    GUICtrlSetLimit(-1, 2, 2) ; nur 2 zahlen
    $id_input_sekunden = GuiCtrlCreateInput("", 110, 65, 40, 20, $ES_NUMBER)
    GUICtrlSetLimit(-1, 2, 2) ; nur 2 zahlen
    $id_button = GuiCtrlCreateButton("Ok", 170, 60, 70)
    $id_radio_zeit = GUICtrlCreateRadio("Zeit", 10, 25)
    GUICtrlSetBkColor(-1,0xFFFFFF)
    GUICtrlSetState($id_radio_zeit, $GUI_CHECKED)
    $id_radio_uhrzeit = GUICtrlCreateRadio("Uhrzeit", 50, 25)
    GUICtrlSetBkColor(-1,0xFFFFFF)
    $id_button_durchsuchen = GUICtrlCreateButton("Eigener Sound", 10, 130)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $id_eigener_sound = GUICtrlCreateInput("", 100, 130, 140)
    GUICtrlSetState(-1, $GUI_DISABLE)

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

    ;erstelle die Checkboxen
    $id_option_sound = GUICtrlCreateCheckbox("Sound beim Herunterfahren (", 10, 105)
    GUICtrlSetBkColor(-1,0xFFFFFF)
    $id_option_eigener = GUICtrlCreateCheckbox(" eigener)", 166, 105)
    GUICtrlSetBkColor(-1,0xFFFFFF)
    GUICtrlSetState(-1, $GUI_DISABLE)

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

    GUISetState ()

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

    While 1 ; -------------------------------------------------------------------------------------- vorerst immer
    $msg = GUIGetMsg()
    Switch $msg ; ------------------------------------------------------------------------------ switch: switch-case mit fensterabfragen ----------------------------------------------------
    Case $GUI_EVENT_CLOSE ; ---------------------------------------------------------------- case: wenn schließen gedrückt wurde
    Exit
    Case $id_radio_uhrzeit ; --------------------------------------------------------------- case: wenn der Radiobutton Uhrzeit gedrückt wurde
    GUICtrlSetData($id_label_stunden, "HH")
    GUICtrlSetData($id_label_minuten, "MM")
    GUICtrlSetData($id_label_sekunden, "SS")
    $id_erster_dp = GUICtrlCreateLabel(":", 55, 50, 2)
    GUICtrlSetBkColor(-1,0xFFFFFF)
    $id_zweiter_dp = GUICtrlCreateLabel(":", 105, 50, 2)
    GUICtrlSetBkColor(-1,0xFFFFFF)
    Case $id_radio_zeit ; ------------------------------------------------------------------ case: wenn der Radiobutton Zeit gedrückt wurde
    GUICtrlSetData($id_label_stunden, "Stunden")
    GUICtrlSetData($id_label_minuten, "Minuten")
    GUICtrlSetData($id_label_sekunden, "Sekunden")
    GUICtrlDelete($id_erster_dp)
    GUICtrlDelete($id_zweiter_dp)
    Case $id_button_durchsuchen ; ---------------------------------------------------------- case: wenn der Button "Datei öffnen" gedrückt wurde
    GUICtrlSetData($id_eigener_sound, FileOpenDialog("Datei öffnen", @ScriptDir, 'Alle Dateien (*.wav)'))
    Case $id_button ; ---------------------------------------------------------------------- case: Abfrage des Buttons "Ok" oder "Abbrechen"
    If GuiCtrlRead($id_button) = "Ok" Then ; ------------------------------------------------- if: wenn der Ok button gedrückt wurde
    $stunden = GuiCtrlRead($id_input_stunden)
    $minuten = GuiCtrlRead($id_input_minuten)
    $sekunden = GuiCtrlRead($id_input_sekunden)
    if ($stunden = "") Then ; wenn feld leer gelassen wurde
    $stunden = 0
    GUICtrlSetData($id_input_stunden, "0")
    EndIf
    if ($minuten = "") Then ; wenn feld leer gelassen wurde
    $minuten = 0
    GUICtrlSetData($id_input_minuten, "0")
    EndIf
    if ($sekunden = "") Then ; wenn feld leed gelassen wurde
    $sekunden = 0
    GUICtrlSetData($id_input_sekunden, "0")
    EndIf
    if $stunden <> "" Or $minuten <> "" Or $sekunden <> "" Then ; wenn in mindestens ein feld etwas steht (bzw. alle ungleich "nix")
    GuiCtrlSetData($id_button, "Abbrechen"); benenne um auf abbrechen
    GUICtrlSetState($id_label_stunden, $GUI_DISABLE); |
    GUICtrlSetState($id_label_minuten, $GUI_DISABLE); |
    GUICtrlSetState($id_label_sekunden, $GUI_DISABLE); |
    GUICtrlSetState($id_input_stunden, $GUI_DISABLE); | alle felder deaktivieren
    GUICtrlSetState($id_input_minuten, $GUI_DISABLE); |
    GUICtrlSetState($id_input_sekunden, $GUI_DISABLE); |
    GUICtrlSetState($id_radio_zeit, $GUI_DISABLE); |
    GUICtrlSetState($id_radio_uhrzeit, $GUI_DISABLE); |
    GuiCtrlsetColor($id_input_sekunden, 0xFF0000)
    GuiCtrlsetColor($id_input_minuten, 0xFF0000)
    GuiCtrlsetColor($id_input_stunden, 0xFF0000)
    $umrechnen = True
    If BitAND(GUICtrlRead($id_radio_uhrzeit), $GUI_Checked) Then ; wenn der Button Uhrzeit angewählt wurde
    $ShowMessage = $stunden&":"&$minuten&":"&$sekunden ;HH:MM:SS (leserlich)
    $ShowMessage = StringSplit($ShowMessage, ":") ; entferne :
    $ShowMessage = _TimeToTicks($ShowMessage[1], $ShowMessage[2], $ShowMessage[3])
    While GuiCtrlRead($id_button) = "Abbrechen"; --------------------------------------- while: mache solange bis der "abbrechen"-button gedrückt wurde
    $msg = GUIGetMsg()
    Sleep(100)
    If Number($ShowMessage) <= Number(_TimeToTicks()) Then ; wenn die aktuelle Uhrzeit die der aktuellen Uhrzeit
    $herunterfahren = True ; wenn ja setze herunterfahrvariable auf true
    ExitLoop ; breche danach die schleife ab
    EndIf
    WEnd
    Global $Hour, $Min, $Sec
    _TicksToTime($ShowMessage,$Hour,$Min,$Sec)
    EndIf
    If BitAND(GUICtrlRead($id_radio_zeit), $GUI_Checked) Then
    $radio_zeit = BitAND(GUICtrlRead($id_radio_zeit), $GUI_Checked)
    If ($radio_zeit And $umrechnen) Then
    $zeit_gesamt = ($stunden * 3600 + $minuten * 60 + $sekunden) ; eingegebene zeit in sekunden
    $umrechnen = False ; danach nicht mehr umrechnen
    EndIf
    EndIf
    If BitAND(GUICtrlRead($id_radio_zeit), $GUI_Checked) Then AdlibEnable("Countdown", 1000)
    EndIf
    ElseIf GuiCtrlRead($id_button) = "Abbrechen" Then ; ------------------------------------------ elseif: wenn abbrechen gedrückt wurde
    GuiCtrlSetData($id_button, "Ok"); bennene um auf ok
    GUICtrlSetState($id_label_stunden, $GUI_ENABLE); |
    GUICtrlSetState($id_label_minuten, $GUI_ENABLE); |
    GUICtrlSetState($id_label_sekunden, $GUI_ENABLE); |
    GUICtrlSetState($id_input_stunden, $GUI_ENABLE); | alle felder aktivieren
    GUICtrlSetState($id_input_minuten, $GUI_ENABLE); |
    GUICtrlSetState($id_input_sekunden, $GUI_ENABLE); |
    GUICtrlSetState($id_radio_zeit, $GUI_ENABLE); |
    GUICtrlSetState($id_radio_uhrzeit, $GUI_ENABLE); |
    ; --------------------------------------- while: mache solange bis der "abbrechen"-button gedrückt wurde
    AdlibDisable()
    EndIf ; ------------------------------------------------------------------------------------ ifende

    ;~ $radio_uhrzeit = BitAND(GUICtrlRead($id_radio_uhrzeit), $GUI_Checked)

    Case $id_option_sound ; ---------------------------------------------------------------- case: wenn die checkbox "spiele sound" gedrückt wurde
    If (GUICtrlRead($id_option_sound) = $GUI_CHECKED) Then ; spiele sound? wenn ja
    GUICtrlSetState($id_option_eigener, $GUI_ENABLE); aktiviere die "eigenen sound"-checkbox
    Else ; wenn unchecked
    GUICtrlSetState($id_option_eigener, $GUI_DISABLE) ; deaktiviere die "eigenen sound"-checkbox
    GUICtrlSetState($id_button_durchsuchen, $GUI_DISABLE); disable auch den durchsuchen button, der sich aktiviert wenn man eigenen sound anchecked
    EndIf

    Case $id_option_eigener; --------------------------------------------------------------- case: wenn die checkbox "eigener sound" gedrückt wurde
    If ((GUICtrlRead($id_option_sound) = $GUI_CHECKED) AND (GUICtrlRead($id_option_eigener) = $GUI_CHECKED)) Then ; aktiviere nur wenn auch der "spiele sound" gecheckt ist
    GUICtrlSetState($id_button_durchsuchen, $GUI_ENABLE)
    Else
    GUICtrlSetState($id_button_durchsuchen, $GUI_DISABLE)
    EndIf

    EndSwitch ; -------------------------------------------------------------------------------- switch: ende -----------------------------------------------------------------------------

    If ($herunterfahren = True) Then ; --------------------------------------------------------- Herunterfahrblock
    If GUICtrlRead($id_option_sound) = $GUI_CHECKED Then ; sound spielen?
    If (GUICtrlRead($id_option_eigener) = $GUI_CHECKED And GUICtrlRead($id_eigener_sound)) Then ; eigener?
    $neuer_sound = GUICtrlRead($id_eigener_sound)
    SoundPlay($neuer_sound, 1)
    Else ; wenn kein eigener
    SoundPlay("shut.wav", 1) ; standardsound
    EndIf
    EndIf
    Exit
    EndIf ; ------------------------------------------------------------------------------------ Ende Herunterfahrblock

    Wend

    Func Countdown()
    $sekunden = GUICtrlRead($id_input_sekunden) ; sekundenfeld auslesen und in sekunden speichern
    $minuten = GUICtrlRead($id_input_minuten) ; minutenfeld auslesen und in minuten speichern
    $stunden = GUICtrlRead($id_input_stunden) ; stundenfeld auslesen und in stunden speichern

    If $sekunden <> 0 Then ; ------------------------- wenn sekunden alles andere als 0 sind
    $sekunden = $sekunden -1 ; ziehe eine sekunde ab
    GUICtrlSetData($id_input_sekunden, $sekunden) ; und speichere sie ins feld
    Else ; wenn sie 0 ist
    $sekunden = 59 ; schreibe 59 als sekunden
    If $minuten <> 0 Then ; wenn die minuten ungleich 0 sind und sekunden auf 59 geschalten
    $minuten = $minuten -1 ; ziehe eine minute ab
    GUICtrlSetData($id_input_minuten, $minuten); und speichere sie ins minutenfeld
    Else ; wenn sekunden auf 59 ging und minuten auf 0 war
    $minuten = 59 ; schreibe 59 ins minutenfeld
    GUICtrlSetData($id_input_minuten, $minuten)
    If $stunden <> 0 Then ; wenn die stunde ungleich 0 ist
    $stunden = $stunden -1 ; ziehe eine stunde ab wenn minuten auf 59 ging
    GUICtrlSetData($id_input_stunden, $stunden) ; und speichere in stunden
    EndIf
    EndIf
    GUICtrlSetData($id_input_sekunden, $sekunden) ; speichere 59 sekunden ins sekundenfeld
    If ($sekunden = 0 AND $minuten = 0 AND $stunden = 0) Then ; wenn alle 3 felder 0 sind
    $herunterfahren = True
    EndIf
    Endif
    EndFunc

    [/autoit]
  • vielen dank
    aber kurz noch ne frage
    so wie ich das sehe, wird die funktion alle 1000 ms aufgerufen
    wird aber in keine while oder so eingesperrt
    das heißt die große programmwhile läuft ständig durch und prüft alle ifs
    hat das irgendwelche auswirkung auf die genauigkeit der zeit?
    z.B. dass ich 1h 10m und 30s eingebe in wahrheit aber durch verzögerungen erst in 1h 20m herutergefahren wird?

  • Adlib funktioniert ungefähr so:
    Immer einmal in einer bestimmten Zeit (ich hab bei dir 1000ms/1sek angegeben) wird eine bestimmte Funktion aufgerufen (in dem Fall "Countdown"), die jedoch nicht mit der main loop interveniert...
    Du kannst immer nur in 1 Endlos-Schleife laufen haben... also wenn ich in die Adlib-Funktion eine while Schleife machen würde und diese endlos (->infinite) laufen würde, kann nicht gleichzeitig der main loop durchlaufen, was bei deinem vorherigem Code der Fall war!

    ..sprich das hat keine auswirkungen auf die genaugkeit der zeit ;)

    3 Mal editiert, zuletzt von ChaosKeks (23. März 2009 um 22:33)

  • so hab ein bisschen weiter geschrieben
    das mit dem countdown ging nicht, weil vor der radiobuttonprüfung das BITAND gefehlt hat

    aber nächstes problem
    ich komm schon wieder nicht aus meiner schleife raus XD
    habs aber so gemacht wie mit der anderen schleife

    n genereller tipp, zum verlassen einer schleife nutze ExitLoop
    falls du zwei schleifen raus willst halt ExitLoop 2 ^^

  • hätte aber bei achims script nicht funktioniert ;P
    aber hey hab auch wieda was dazugelernt :D