AFK Schleife/ Schleife unterbrechen

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Kangaroo.

    AFK Schleife/ Schleife unterbrechen

    Hey ich code atm an einen kleinen Projekt und wollte eine art "AFK System einbauen".
    Da ich keine Ahnung habe wie ich Abfragen kann ob eine Eingabe seitens User vorhanden ist(Egal durch was) habe ich mich darauf beschränkt ab zu fragen ob Leertaste,Enter,PfeilOben,Linke/Rechte Maustaste gedrückt werden.

    Nun gut... Das ganze soll dann so aussehen:

    Wenn keine dieser Tasten gedrückt ist/wird, dann merkt es sich die aktuelle Zeit und wartet bis z.B. 5 Minuten vergangen sind, danach wird die Funktion aktiviert.
    Soweit so gut, das ist an sich kein großer Aufwand und machbar, das Problem ist nun, dass das Programm nichts mehr machen kann während die Schleife läuft, aber da es ja nur aktivieren soll wenn man AFK ist, ist das Schlecht weil es ja sozusagen die Schleife neustarten muss, sobald eine Eingabe vorhanden ist.
    Nochmal kurz... Wenn keine Eingabe, dann Schleife...Wenn Eingabe während Schleife da, dann abbrechen und neu starten...Ansonsten Nach abgelaufener Zeit Funktion starten.

    PS.: Ich habe es auch schon mit einer Do Until Schleife versucht etc...

    Hier die Codes:

    Auf Pastebin, weil er es hier nicht richtig anzeigen will...
    pastebin.ca/1979084

    pastebin.ca/1979083


    Ich würde mich freuen wenn mir jemand helfen könnte ;)

    MFG

    Jakefrost77 schrieb:

    Das mit Multithreading ist mir auch schon gekommen^^

    Du kannst hierfür entweder einen Timer nehmen oder einen Background-Thread , bei beiden bleibt die Prüfroutine selber gleich, da ja auch der Thread ein Thread.Sleep ausführen muss um möglichst wenig CPU Last zu erzeugen.

    Jakefrost77 schrieb:

    Ich hab nur immer noch das Problem, dass es den Thread ja dann beenden muss, sobald eine der Tasten gedrückt wird...

    Warum ist das nötig ? Kannst Du nicht nur prüfen ob eine Taste gedrückt oder eine Mausbewegung stattgefunden hat
    - falls ja: Counter oder TimeOut-Zeit zurücksetzen, bzw den AFK Status aufheben
    - falls nein: Counter erhöhen und prüfen ob Timeout erreicht wurde

    Einiges eleganter wäre eine ereignisgetriebene Variante mit den globalen Hook-API's, wobei der Timer nur alle 5 Minuten laufen muss. Unter XP geht das über :

    - SetWindowsHookEx
    - CallNextHookEx
    - UnhookWindowsHookEx

    Die API Deklarationen und (nicht ganz einfache) VB.Net Beispiele findest Du unter den Links oder auch hier

    Ob das unter Windows 7 auch noch geht lkann ich nicht sagen.