MsgBox erst anzeigen, wenn zuvor x Sekunden lang keine Eingabe getätigt wurde

  • Hallo Leute,


    stehe hier vor einem kleinen Problem: habe hier ein Script, welches eine MsgBox öffnet und dem Benutzer eine Meldung anzeigt. Nun kann es ja durchaus sein, dass der Benutzer z.B. mitten beim Verfassen einer Email ist und die hochkommende Meldung beim Eintippen versehentlich mit Enter oder Space beendet.


    Gibt es eine Möglichkeit über AutoIT einen Zeitraum X (z.B. 10 Sekunden) auf Eingaben zu überwachen und die nächste Aktion (MsgBox) erst dann auszuführen wenn die eingestellte Zeit keine Tasteneingaben getätigt wurden? Mausklicks wären egal, wichtig ist nur, dass der Benutzer nicht mitten in einer Texteingabe steckt.


    Noch eine zweite Frage: gäbe es eine Möglichkeit das MsgBox-Fenster eine definierte Zeit geöffnet zu lassen, obwohl in diesem bereits z.B. auf "OK" geklickt wurde? Einfach, um den Benutzer zu "zwingen" sich die Meldung genauer durchzulesen. ;)


    Danke & Gruß,

    Tupac

    Einmal editiert, zuletzt von Tupac (16. März 2012 um 09:17)

  • Probiere es mal damit:

    [autoit]


    $delta_time = 10 * 1000 ;10 Sekunden

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

    $hDLL = DllOpen("user32.dll")
    $timer = TimerInit()
    Do
    $key = _KeyPressCheck(1, 221, -1, $hDLL)
    If $key Then $timer = TimerInit()
    Sleep(50)
    Until TimerDiff($timer) > $delta_time And Not $key
    DllClose($hDll)

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

    ConsoleWrite($delta_time / 1000 & " Sekunden ohne Eingabe" & @LF)

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

    $timer = TimerInit()
    Do
    MsgBox(0, "Info: " & Int(TimerDiff($timer) / 1000), "Test")
    Until TimerDiff($timer) > $delta_time

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

    ; #FUNCTION# ===================================================================
    ; Name : _KeyPressCheck
    ; Description: Check if specified keys are pressed
    ; Parameter(s): sHexKey - Key to check for
    ; Requirement(s): None
    ; Return Value(s): On Success - Returns 1
    ; On Failure - Returns 0
    ; Author(s): Valuater
    ;===============================================================================
    Func _KeyPressCheck($iStart, $iFinish, $iHexKey = -1, $vDLL = 'user32.dll')
    Local $ikey, $ia_R
    For $ikey = $iStart To $iFinish
    If $iHexKey = -1 Then $ia_R = DllCall($vDLL, 'int', 'GetAsyncKeyState', 'int', '0x' & Hex($ikey, 2))
    If $iHexKey <> -1 Then $ia_R = DllCall($vDLL, 'int', 'GetAsyncKeyState', 'int', '0x' & $iHexKey)
    If Not @error And BitAND($ia_R[0], 0x8000) = 0x8000 Then Return 1
    Next
    Return 0
    EndFunc ;==>__KeyPressCheck

    [/autoit]

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Hey UEZ,

    vielen herzlichen Dank für die schnelle Bereitstellung einer klasse Lösung.
    Genau danach hatte ich gefragt, perfekt!!

    Vielen Dank nochmal & Gruß