AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Logout nach Zeit

Ein Thema von BigAl · begonnen am 11. Sep 2008 · letzter Beitrag vom 12. Sep 2008
Antwort Antwort
Seite 1 von 2  1 2      
BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
495 Beiträge
 
Delphi 12 Athens
 
#1

Logout nach Zeit

  Alt 11. Sep 2008, 22:14
Hallo zusammen,

ich habe eine Applikation geschrieben in der sich Benutzer einloggen können. Nun möchte ich eine zentrale Funktion schreiben, welche den aktuellen benutzer nach einer bestimmten Zeit ausloggt. Die Zeit soll aber nur laufen, wenn der Benutzer nichts macht (keine Taste auf Tastatur und Maus drückt). Soweit so gut.

Das problem ist nun, das meine Applikation aus einem Hauptformular besteht welches den Container darstellt. Dieses Formular hat einen Kopf- und einen Fussbereich. Dazwischen habe ich TPanel, welches ich als Canvas für die dynamische Aufnahme meiner Forms benutze. Das Hauptproblem ist nun, dass ich nie weiss, wo meine Events nun landen. Beim Hauptformular, beim eingebetteten Formular oder gar bei einem geöffneten Dialog. Ich habe schon verzweifelt im Application-Objekt usw. gesucht. OnIdle fällt leider flach, da jeder kleinste Zucker der Maus oder halt auch irgendwelche Timer die ich laufen habe jeweils nach Abschluss wieder die OnIdle kurz aufrufen.

Zurück zum Problem. Wie kann ich Applikationsweit feststellen, ob eine Taste der Tastatur oder eine Taste der Maus betätigt wurde. Der Ablauf des Programms soll dann natürich normal fotgesetzt werden. Ich möchte ja lediglich die Timout-Zeit neu starten...

Hat irgendwer 'ne Idee bzw. hat irgendjemand verstanden was ich oben geschrieben habe

Alex
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)
  Mit Zitat antworten Zitat
BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
495 Beiträge
 
Delphi 12 Athens
 
#2

Re: Logout nach Zeit

  Alt 11. Sep 2008, 22:53
Leider kann ich den Beitrag nicht löschen. Mache mir seit Tagen Gedanken und die Lösung ist so einfach. Wäre evtl. was für die Code-Library:

1. Application.OnMessage zuweisen (z.B. durch setzen von TApplicationEvents auf dem Hauptformuar.
2. folgenden Code einfügen:

Delphi-Quellcode:
 if (Msg.message = WM_KEYDOWN) or (Msg.message = WM_LBUTTONDOWN) or <irgendwelche weiteren Ereignisse>) then
    <timeout neu initialiseren>
Regards

Alex
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)
  Mit Zitat antworten Zitat
Benutzerbild von Mackhack
Mackhack

Registriert seit: 29. Nov 2003
Ort: San Diego, CA/USA
1.446 Beiträge
 
Delphi 2006 Architect
 
#3

Re: Logout nach Zeit

  Alt 12. Sep 2008, 00:55
[msdn]
GetLastInputInfo
[/msdn]
Um etwas Neues zu schaffen muss man seine Ohren vor den Nein-sagern verschliessen um seinen Geist öffnen zu können.
(George Lukas)
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#4

Re: Logout nach Zeit

  Alt 12. Sep 2008, 06:27
Zitat von Mackhack:
[msdn]
GetLastInputInfo
[/msdn]
Hallo, GetLastInputInfo() funktioniert systemweit. Die Frage war jedoch
Zitat:
Wie kann ich Applikationsweit feststellen, ob eine Taste der Tastatur oder eine Taste der Maus betätigt wurde.
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von Mackhack
Mackhack

Registriert seit: 29. Nov 2003
Ort: San Diego, CA/USA
1.446 Beiträge
 
Delphi 2006 Architect
 
#5

Re: Logout nach Zeit

  Alt 12. Sep 2008, 06:30
Ups!
Um etwas Neues zu schaffen muss man seine Ohren vor den Nein-sagern verschliessen um seinen Geist öffnen zu können.
(George Lukas)
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.763 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Logout nach Zeit

  Alt 12. Sep 2008, 07:29
Ich würde nur WM_KEYDOWN und WM_MOUSEMOVE prüfen, jede Mausaktion eines typischen grobmotorischen Users ist zwangsläufig mit einer Mousebewegung verbunden

Sherlock
Oliver
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Logout nach Zeit

  Alt 12. Sep 2008, 11:01
Bei MouseMove passiert aber dann auch ein Reset des Timers wenn der Benutzer lediglich die Maus über die Form bewegt ohne zu klicken. Das nenne ich noch nicht wirklich "aktiv" mit der Anwendungen arbeiten.
  Mit Zitat antworten Zitat
BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
495 Beiträge
 
Delphi 12 Athens
 
#8

Re: Logout nach Zeit

  Alt 12. Sep 2008, 11:15
Hallo Leute,

vielen Dank für eure Antworten.

Das mit der Lösung über den Message-Handler funktioniert prächtig . Ich setze mir einfach einen Zeitstempel der letzten Benutzeraktion und kann dann über die Zeitdifferenz zur aktuellen Zeit wunderbar den Timeout-Wert ermitteln. Nach der Zeit mache ich dann einen "Fallback" auf den Default-User.

Ein bisserl am grübeln bin ich noch was ich mache wenn der Benutzer in einem Dialog (Modal) steht. Am einfachsten wäre es - denke ich - solange WM_CLOSE-Messages zu schicken bis alle Dialoge geschlossen sind. Natürlich muss zwischen dem Senden der Messages die Kontrolle immer wieder an die Applikation gegeben werden, damit die Fenster auch geschlossen werden. Da ich die Überprüfung eh einem zentralen Timer vornehme könnte das dann wie folgt aussehen:

OnTimer:
if <...Timeout...> then
if <Dialog geöffnet> then
SendMessage(AppHandle, WM_CLOSE....)
else
<Logout>

Wie sieht das für euch aus? Hat jemand eine elegantere Lösung parat?

Regards

Alex
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)
  Mit Zitat antworten Zitat
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#9

Re: Logout nach Zeit

  Alt 12. Sep 2008, 11:34
Ich habe keine elegantere Lösung, aber ich stelle mir gerade vor, mit deinem Programm zu arbeiten, irgendwelche Daten eingebe oder bearbeite, kurz auf die Toilette muss, dabei vielleicht jemanden treffe und einen Plausch (natürlich dienstlich) halte, zurück komme und feststellen muss, dass meine bisherige Arbeit für die Katz war, weil mich das Programm abgemeldet hat.

Edit:

Vielleicht sollte nach dem Timeout einfach die weitere Bedienung, bis zur Erneuten Anmeldung, gesperrt werden. A la Passwort-Bildschirmschoner.
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.763 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Logout nach Zeit

  Alt 12. Sep 2008, 11:37
Zitat von Jelly:
Bei MouseMove passiert aber dann auch ein Reset des Timers wenn der Benutzer lediglich die Maus über die Form bewegt ohne zu klicken. Das nenne ich noch nicht wirklich "aktiv" mit der Anwendungen arbeiten.
Microsoft schon So funktionieren halt Bildschirmschoner, oder das Sperren eines Arbeitsplatzes.

Sherlock
Oliver
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz