• Hi,

    ich habe hier mal eine kleine UDF gebaut zur Erkennung ob der user (aktiv) den PC benutzt.


    hier mal ein Beispiel

    Spoiler anzeigen
    [autoit]


    #include "AFKUdf.au3"

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

    GUICreate("Afk UDF", 200, 50)
    $Label = GUICtrlCreateLabel("Du bist da!", 75, 10, 50, 50)
    GUISetState(@SW_SHOW)

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

    _AFK_Startup(1, "There", "Away")

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case -3
    _AFK_Shutdown()
    Exit

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

    EndSwitch
    WEnd

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

    Func There()
    GUICtrlSetData($Label, "Du bist da!")
    EndFunc ;==>There

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

    Func Away()
    GUICtrlSetData($Label, "Du bist weg!")
    EndFunc ;==>Away

    [/autoit]

    und hier die Udf

    Spoiler anzeigen
    [autoit]


    Global $__AFK_AtKeyboardFunc
    Global $__AFK_Time
    Global $__AFK_AwayFunc
    Global $__AFK_Timer = 0
    Global $__AFK_MPos
    Global $__AFK_Called = 0

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

    ; #FUNCTION# ======================================================================================
    ; Name ..........: _AFK_Startup()
    ; Description ...: Startet die Afk UDF
    ; Syntax ........: _AFK_Startup($nTime, $AtKeyboarsFunc, $AwayFunc)
    ; Parameters ....: $nTime - Zeit (in Minuten) wann die Away Funktion aufgerufen werden soll
    ; $AtKeyboarsFunc - Funktion die aufgerufen wird wenn der user sich am PC befindet.
    ; $AwayFunc - Funktion die aufgerufen wird wenn der User nicht am PC befindet.
    ; Return values .: Failure: -1
    ; Author ........: Sprenger120
    ; Modified ......:
    ; Remarks .......:
    ; Related .......:
    ; Link ..........:
    ; Example .......:
    ; =================================================================================================

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

    Func _AFK_Startup($nTime, $AtKeyboarsFunc, $AwayFunc)
    If Number($nTime) = 0 And Number($nTime) < 1 Then Return -1
    $__AFK_Time = $nTime
    $__AFK_AwayFunc = $AwayFunc
    $__AFK_AtKeyboardFunc = $AtKeyboarsFunc
    $__AFK_Timer = 0
    $__AFK_Called = 0
    $__AFK_MPos = MouseGetPos()
    AdlibRegister("__AFK_Get", 1000)
    EndFunc

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

    ; #FUNCTION# ======================================================================================
    ; Name ..........: _AFK_Shutdown()
    ; Description ...: Löscht alle benutzten Resourcen
    ; Syntax ........: _AFK_Shutdown()
    ; Parameters ....:
    ; Author ........: Sprenger120
    ; Modified ......:
    ; Remarks .......:
    ; Related .......:
    ; Link ..........:
    ; Example .......:
    ; =================================================================================================

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

    Func _AFK_Shutdown()
    $__AFK_AtKeyboardFunc = ""
    $__AFK_Time = ""
    $__AFK_AwayFunc = ""
    $__AFK_Timer = 0
    $__AFK_MPos = ""
    $__AFK_Called = 0
    AdlibUnRegister("__AFK_Get")
    EndFunc

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

    ; #FUNCTION# ======================================================================================
    ; Name ..........: __AFK_Get()
    ; Description ...: Internal
    ; Syntax ........: __AFK_Get()
    ; Parameters ....:
    ; Author ........: Sprenger120
    ; Modified ......:
    ; Remarks .......:
    ; Related .......:
    ; Link ..........:
    ; Example .......:
    ; =================================================================================================

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

    Func __AFK_Get()
    $__AFK_TempPos = MouseGetPos()
    If $__AFK_TempPos[0] = $__AFK_MPos[0] And $__AFK_TempPos[1] = $__AFK_MPos[1] Then
    $__AFK_Timer += 1
    Else
    $__AFK_Timer = 0
    $__AFK_MPos = MouseGetPos()

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

    If $__AFK_Called = 0 Or $__AFK_Called = 2 Then
    Call($__AFK_AtKeyboardFunc)
    $__AFK_Called = 1
    EndIf
    EndIf

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

    If $__AFK_Timer >= ($__AFK_Time * 60) Then
    If $__AFK_Called < 2 Then
    $__AFK_Called = 2
    Call($__AFK_AwayFunc)
    EndIf
    EndIf
    EndFunc

    [/autoit]


    Fragen, Anregungen, Feedback bitte posten.

  • und was is wenn ich lange Texte schreibe und dabei die Maus nicht bewege?^^

    hm da wüsste ich nicht wie man erkennen könnte das man schreibt. Mann könnte vlt mit Block input arbeiten und wenn der User wutentbrannt auf die tastatur eindrischt könnte mann mit der bass.au3 aufnehmen und analysieren :rofl:

    #1Post unnütze Returns entfernt bei __AFK_Get() (die is eh nur intern)

  • [autoit]

    Func _IsPressedAnything()
    While 1
    If _IsPressed($Hex) or _MouseMoved()
    $Hex += 1
    If $Hex = $IsPressed_Max Then $Hex = 01
    Wend
    EndFunc

    [/autoit]

    So sähe meine Lösung aus ;)

    mfg Ubuntu

  • Ihr immer mit eurem _ispressed ....
    Schau dir die
    Funktion _WinAPI_SetWindowsHookEx
    an.
    Da musst du nichts in die While-Schleife reinschreiben.

    Einmal editiert, zuletzt von Sithlord95 (4. Mai 2010 um 16:55)

  • Ihr immer mit eurem _ispressed ....

    Es funktioniert doch, warum also anders.


    schön aber was bringt es mir wenn der script unterbrochen wird

    Wird er doch nicht


    [autoit]

    Func _IsPressedAnything()
    AdlibRegister("_isPressedAnything") ;benutzt du doch jetzt und funktionier so auch weiterhin :rolleyes:

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

    If _IsPressed($Hex) or _MouseMoved()
    $Hex += 1
    If $Hex = $IsPressed_Max Then $Hex = 01

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

    EndFunc

    [/autoit]

    mfg Ubuntu

  • Es funktioniert doch, warum also anders.

    Es geht darum die Schleife leer zu halten und dadurch zu erreichen das sich das Script als Funktion eignet.
    Natürlich geht das auch mit _ispressed,aber das ist nicht in seinem Interesse.

  • Siehst du oben eine Schleife ?(

    Aber deine Methode ist höchstwarscheinlich trotzdem besser, ich wollte nur sagen das es auch mit _IsPressed geht :rolleyes:

    mfg Ubuntu