none
Inaktivität eines Benutzers feststellen RRS feed

  • Frage

  • hi Füxe, und andere Mitleser

    Erstens:
    eine, eigentlich nicht FoxPro spezifische Frage:

    Wie kann ich feststellen, dass der Benutzer am PC Untätig wird? Also keine Aktivitäten mit der Maus/Tastatur was tut. Zweck der Sache ist, dass wenn am Monitor irgendwelche Fenster im Vordergrund stehen, dass die dann mit der eigentlichen Hauptanwendung (bei mir das Boniersystem) wieder verdeckt werden.
    Oder Alternativ: Wie kann ich mich in das Event "Bildschirm abschalten" aus der Energieverwaltung reinhängen? (W7/XP)

    Zweitens:
    per ON SHUTDOWN kann man ja sein eigenes Proggie "gesischert" beenden, Gibt es da auch ein pedant dafür, dass auf die Selbsteinschläferung des Computers (Energie sparen) reagiert? Als Gegenstück müsste man auch auf das Aufwecken aus dem Energiesparmodus getriggert werden.

    lg mike


    Sonntag, 23. September 2018 17:49

Alle Antworten

  • Hi Mike,

    Chris Wollenhaupt hat vor Jahren mal was dazu auf seiner KnowlBits Seite geschrieben...

    guckst Du hier: http://www.foxpert.com/foxpro/knowlbits/files/knowlbits_200903_1.htm

    Interessant sind auch diese Links zum Thema:

    https://www.tek-tips.com/viewthread.cfm?qid=1224189

    http://www.tomorrowssolutionsllc.com/Articles/Taking%20Advantage%20of%20Idle%20Cycles.PDF

    HTH


    Gruss / Best regards
    -Tom
    Debugging is twice as hard as writing the code in the first place.
    Therefore, if you write the code as cleverly as possible,
    you are, by definition, not smart enough to debug it. 010101100100011001010000011110000101001001101111011000110110101101110011

    Montag, 24. September 2018 09:39
  • hi chris;

    diesen Mechanismus wie in deiner verlinkten PDF hab ich schon lange innerhalb meiner Anwendungen defaultmäßig eingebaut.
    Im ThisForm.INIT habe ich diesen Programmteil generell laufen. Der Merker [FormAutoDestroy] wird schon beim Design gesetzt, kann aber im LOAD-Event über eine INI-Datei überschrieben werden 

    IF This.FormAutoDestroy
      FOR EACH Lc_Object IN This.Objects
        IF PEMSTATUS(Lc_Object,"MouseDown",5)
          BINDEVENT(Lc_Object,"MouseDown",This,"MouseDown")
        ENDIF 
        IF PEMSTATUS(Lc_Object,"MouseMove",5)
          BINDEVENT(Lc_Object,"MouseMove",This,"MouseMove")
        ENDIF 
        IF PEMSTATUS(Lc_Object,"Objects",5)
          FOR EACH LOC_OBJ02 IN Lc_Object.Objects
            IF PEMSTATUS(LOC_OBJ02,"MouseDown",5)
              BINDEVENT(LOC_OBJ02,"MouseDown",This,"MouseDown")
            ENDIF 
    ......
    Das Keypress-Event hab ich nicht ge-BINDEVENT-ted, da die Form sowieso generell auf KeyPreview = .t. steht, und das dadurch eigentlich immer feuert.

    Nur zur Info:

    In den beiden Events (Keypress und MouseMove) wird der Destroy-Timer geresettet und wenn der Timer auslöst, wird dort anhand eines ähnlichen Merkers entschieden ob die Form.Release oder Form.Hide (ins systray) auszuführen ist.
    Geänderte Daten werden NICHT gespeichert. Dazu wird im Fehlerprotokoll ein Eintrag gemacht, der bei Wiederaufrufen des Programmes dann angezeigt wird.
    (Schon passiert, dass einer beim Tippen eingeschlafen ist und dabei auf die Tastatur fiel...... Daten waren in der Eingabemaske dementsprechend brauchbar) :-))))

    Da ich generell kein "DO FORM xyz WITH parameters" innerhalb eines FormEvent oder Form.Methode aufrufe, sondern =ThisForm.DoForm("FormName", Parameterliste) mache, hab ich dort einen Mechanismus, der dann das AutoDestroy solange unterbindet, bis alle darunter geöffneten Fenster manuell oder automatisch geschlossen werden.
    Wird die Hauptform mit DESTROY geschlossen, dann kennt die auch alle anderen geöffneten Forms und zieht die runter. Bei HIDE bleiben die aber weiterhin offen und sichtbar. Bei HIDE steht die Hauptform dann im SYSTRAY.

    Nuss nun schauen, wie ich deinen Hinweis vom FOXPERT.COM da hinein bekomme

    lg mike


    Montag, 24. September 2018 14:39