countdown abbrechen?

  • ich starte mit num1 einen countdown. leider kan ich en nicht mehr aufahlten oder neustarten wenn er grad läuft. würd gern den countdown stoppen und neustarten wen man wieder auf num1 drückt. ist das möglich?

    [autoit]

    #include <GUIConstants.au3>

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

    Func _IsPressed($s_hexKey, $v_dll = 'user32.dll')
    Local $a_R = DllCall($v_dll, "int", "GetAsyncKeyState", "int", '0x' & $s_hexKey)
    If Not @error And BitAND($a_R[0], 0x8000) = 0x8000 Then Return 1
    Return 0
    EndFunc

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

    Func _Timer()
    GUICtrlSetData($lab,"BIG SHIELD count down")
    sleep(500)
    GUICtrlSetData($lab,"")

    For $i = 54 to 1 Step -1
    GUICtrlSetData($lab,$i)
    If $i == 5 Then
    SoundPlay("shield.wav")
    EndIf
    sleep(1000)
    Next

    GUICtrlSetData($lab,"BIG SHIELD, GET IT!!!!!")
    SoundPlay("shield.wav")
    EndFunc

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

    $gui = GUICreate("Big-Shield-Timer", 200, 100)
    $lab = GUICtrlCreateLabel(" BIG SHIELD TIMER... :P ", 30, 10)
    GUISetState(@SW_SHOW)

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

    sleep(1000)

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

    If Send("{NUMLOCK on}") Then
    GUICtrlSetData($lab,"Numlock = ON")
    sleep(1000)
    GUICtrlSetData($lab,"")
    EndIf

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

    GUICtrlSetData($lab,"start countdown with: 'Num1'")

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

    sleep(1000)

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

    $dll = DllOpen("user32.dll")

    while 1
    sleep(1)
    If _IsPressed("61", $dll) Then
    _Timer()
    EndIf

    WEnd

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

    DllClose($dll)

    [/autoit]

    Einmal editiert, zuletzt von FoXMorayno (28. April 2007 um 11:35)

  • klappt fast. wenn ich 2mal num1 drücke, wird die funktion 2mal parallel durchgeführt. kann ich prüfen ob die function schon läuft?

    aber, das hat mich schon ein gutes stück nach vorne gebracht :)

    [autoit]

    #include <GUIConstants.au3>

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

    HotKeySet("{NUMPAD1}","_Timer")

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

    $gui = GUICreate("Big-Shield-Timer", 200, 100)
    $lab = GUICtrlCreateLabel(" BIG SHIELD TIMER... :P ", 30, 10)
    GUISetState(@SW_SHOW)

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

    sleep(1000)

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

    If Send("{NUMLOCK on}") Then
    GUICtrlSetData($lab,"Numlock = ON")
    sleep(1000)
    EndIf

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

    GUICtrlSetData($lab,"start countdown with: 'Num1'")

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

    Func _Timer()
    GUICtrlSetData($lab,"BIG SHIELD count down")
    sleep(500)
    GUICtrlSetData($lab,"")

    For $i = 4 to 1 Step -1
    GUICtrlSetData($lab,$i)
    If $i == 5 Then
    SoundPlay("shield.wav")
    EndIf
    sleep(1000)
    Next

    GUICtrlSetData($lab,"BIG SHIELD, GET IT!!!!!")
    SoundPlay("shield.wav")
    EndFunc

    while 1
    sleep(1)
    WEnd

    [/autoit]

    Einmal editiert, zuletzt von FoXMorayno (28. April 2007 um 12:59)

  • zum beispiel indem du in ne .ini schreibst , dass es gerade läuft.
    Vll kann man auch mit Global variablen arbeiten, hat halt alles vor und nachteile

  • [autoit]


    #include <GUIConstants.au3>

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

    HotKeySet("{NUMPAD1}","_TimerBS")

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

    Global $bst = "off"
    Global $sst = "off"
    Global $ddt = "off"
    Global $bht = "off"

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

    $gui = GUICreate("UT2K4 TIMER", 200, 100)
    $bs = GUICtrlCreateLabel(" BIG SHIELD TIMER... :P ", 20, 10)
    $copy = GUICtrlCreateLabel(" http://www.fun-fox.de ", 20, 75)
    GUISetState(@SW_SHOW)

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

    sleep(1000)

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

    GUICtrlSetData($bs,"")

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

    If Send("{NUMLOCK on}") Then
    GUICtrlSetData($bs,"Numlock = ON")
    sleep(1000)
    EndIf

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

    GUICtrlSetData($bs,"BIG SHIELD: 'Num1'")

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

    Func _TimerBS()
    If $bst == "off" OR $bst == "a2" Then

    Global $bst = "on"
    GUICtrlSetData($bs,"BIG SHIELD count down")
    sleep(500)
    GUICtrlSetData($bs,"")

    For $i = 5400 to 1 Step -1

    If $bst == "a2" Then
    $i = 1
    _TimerBS()
    EndIf

    If $bst <> "a2" Then
    GUICtrlSetData($bs,$i)
    If $i == 500 Then
    SoundPlay("shield.wav")
    EndIf
    EndIf

    sleep(1)
    Next

    If $bst <> "a2" Then
    GUICtrlSetData($bs,"BIG SHIELD, GET IT!!!!!")
    SoundPlay("shield.wav")
    Global $bst = "off"
    EndIf

    Else
    Global $bst = "a2"

    EndIf
    EndFunc

    while 1
    sleep(1)
    WEnd

    [/autoit]

    das problem bei der sache ist nur, dass es ne kleine lücke gibt. wenn ich schnel auf den Num1 Knopf drücke kann es passieren, dass die funktion trotzden mal gestartet wird. die hotkey funktion arbeitet alles hintereinander ab. wird die funktion mal gestartet wird der 1. countdown gestoppt, der 2. abgearbeitet und danach der 1.fortgesetzt -_-.

    wenn man nen bisschen vorsichtig mit der taste ist klappt es ganz gut

    danke für eure hilfe

    EDIT:

    übrigens

    sleep(1000) = 1sekunde

    For $i = 5400 to 1 Step -1
    sleep(1)
    Next

    sind 54 sekeunden -_-, verwirrt mich leicht

    Einmal editiert, zuletzt von FoXMorayno (28. April 2007 um 14:08)