AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Automatisch abmelden von Benutzer nach Zeit ohne Handlung
Thema durchsuchen
Ansicht
Themen-Optionen

Automatisch abmelden von Benutzer nach Zeit ohne Handlung

Ein Thema von Jens Hartmann · begonnen am 14. Sep 2009 · letzter Beitrag vom 19. Sep 2009
Antwort Antwort
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#1

Automatisch abmelden von Benutzer nach Zeit ohne Handlung

  Alt 14. Sep 2009, 20:10
Hallo,

kann ich es irgendwie einfach realisieren, das ein Programmbenutzer, automatisch abgemeldet wird, wenn er nach Voreingestellter Zeit keine Handlung mehr durchgeführt hat.

Soll heißen, mein Benutzer hat sich in meinem Programm angemeldet, hat irgendwas durchgeführt und verlässt den Arbeitsplatz. Jetzt soll nach voreingestellter Zeit ohne Maus Bewegung etc automatisch alle Freigeschalteten Programmrechte wieder gesperrt werden und der Anmeldebildschirm erscheinen.

Mein Lösungsansatz, wäre mit einem Timer. Ich weiß nur nicht genau, wie ich den Starte. Wie kann ich den Auswerten, das keine aktivität mehr vorhanden ist. Allerdings nur User Aktivität. Das Programm selber führt gewisse Sachen aus, die sollen weiterlaufen.

Außerdem suche ich das Ereignis, welches mir eine neue Aktivität angibt. Dann wäre die Lösung so denke ich ganz einfach.


Delphi-Quellcode:
Keine Aktivität mehr

TimerAutoAbmelden.Enabled := true;

Erneute Aktivität


TimerAutoAbmelden.Enabled := false;


procedure TForm1.AutoAbmeldenTimer(Sender: TObject);
begin
  Abmelden;
end;
Danke schon mal für Eure antworten.

Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#2

Re: Automatisch abmelden von Benutzer nach Zeit ohne Handlun

  Alt 14. Sep 2009, 20:16
also ich würde es auch mit einem Timer machen. Du musst halt nur mitbekommen, wenn sich die Maus bewegt, oder eine Taste gedrückt wurde. Dies könnte man noch mit einem Hook kombinieren.
Sieht dann also so aus:

Direkt nach der letzten Aktivität wird der Timer und der Hook gestartet. Löst der Hook aus, wird der Timer erneut gestartet. Löst der Hook nicht aus, läuft der Timer munter weiter. Erkennt das Programm eine Aktivität durch zum Beispiel einen Klick, wird der Timer auch neu gestartet und das Programm arbeitet seine Funktionen ab.

Bernhard

PS: Falls die entsprechenden Rechner ausschließlich für dieses Programm verwendet werden, gäbe es noch die Möglichkeit eines geplanten Tasks. Dann muss dem Programm nur noch mitgeteilt werden, dass es jetzt inaktiv ist.
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Benutzerbild von thkerkmann
thkerkmann

Registriert seit: 7. Jan 2006
Ort: Pulheim Brauweiler
464 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Automatisch abmelden von Benutzer nach Zeit ohne Handlun

  Alt 14. Sep 2009, 20:19
Hi,

verwende einen Timer und einen Counter.
Mit jeder Aktivität des Benutzers setzt Du den Counter auf einen bestimmten Wert. z.B. 30 für 30 Sekunden.
Stelle den Timer auf eine Sekunde ein, und im TimerEvent zählst Du den Counter runter, solange er >0 ist.
Wenn der dann <=0 wird, sperrst Du dein Programm.

Ich habe gute Erfahrungen mit dieser Lösung gemacht. Du kannst z.B im OnMouseMove und im OnKeyPress den Counter setzen.

Gruss
Thomas Kerkmann
Ich hab noch einen Koffer in Borland.
http://thomaskerkmann.wordpress.com/
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.643 Beiträge
 
Delphi 12 Athens
 
#4

Re: Automatisch abmelden von Benutzer nach Zeit ohne Handlun

  Alt 14. Sep 2009, 20:20
Warum nimmst du nicht den Bildschirmschoner von Windows? Da kannst du eine Zeit für Inaktivität setzen.
Wir haben im Moment das umgekehrte Problem, dass unsere IT diese Zeit auf 10 min gesetzt hat und das stört so fast jeden in der Firma.
Wenn du das in Delphi nutzen willst, wird es bestimmt eine API Funktion geben, die den Bildschirmschoner einschaltet.
Matthias
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#5

Re: Automatisch abmelden von Benutzer nach Zeit ohne Handlun

  Alt 14. Sep 2009, 20:43
Delphi-Quellcode:
function LastInput: DWord;
var LInput: TLastInputInfo;
begin
  LInput.cbSize := SizeOf(TLastInputInfo); GetLastInputInfo(LInput);
  Result := GetTickCount - LInput.dwTime;
end;
.
.
.
Procedure..
BEGIN
if Lastinput>100000 then //100 sec
Lockworkstation; // Programme laufen weiter, aber ohne neue Anmeldung keine Aktion möglich
END;
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#6

Re: Automatisch abmelden von Benutzer nach Zeit ohne Handlun

  Alt 14. Sep 2009, 21:00
Danke erstmal,

für die schnellen antworten. Das mit dem Timer habe ich momentan so gelößt

Delphi-Quellcode:
procedure Anmelden;
begin
  ....
  AutoAbmelden.Interval := 10000*StrToInt(Zeit);//Zeit in Minuten
  AutoAbmelden.Enabled := true;
  ....
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  AutoAbmelden.Enabled := false;
  AutoAbmelden.Enabled := true;
end;
Zitat von thkerkmann:
verwende einen Timer und einen Counter.

Der Counter, müsste eine globale Variable sein. Deshalb frage ich mich, ob das richtig wäre. Müsste ja dann in etwa so aussehen.

Delphi-Quellcode:

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  Counter := 30; //die 30 kann sich ändern, daher müsste ich jedesmal aus der DB lesen.
end;

procedure TForm1.AutoAbmeldenTimer(Sender: TObject);
begin
  for i := 0 to Counter do
    begin
      ..
      Counter -1;
    end;
  Abmelden.Click;
end;
Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Automatisch abmelden von Benutzer nach Zeit ohne Handlun

  Alt 14. Sep 2009, 22:10
Was ist gegen die Lösung von hathor einzuwenden?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#8

Re: Automatisch abmelden von Benutzer nach Zeit ohne Handlun

  Alt 14. Sep 2009, 22:15
Zitat von luckie:
Was ist gegen die Lösung von hathor einzuwenden?
Nichts, habe ich nur noch nicht ausprobieren können. Werde das aber noch machen.

Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von thkerkmann
thkerkmann

Registriert seit: 7. Jan 2006
Ort: Pulheim Brauweiler
464 Beiträge
 
Delphi 2010 Professional
 
#9

Re: Automatisch abmelden von Benutzer nach Zeit ohne Handlun

  Alt 19. Sep 2009, 12:49
So hab ich das aber nicht gemeint:

Delphi-Quellcode:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  Counter := 30; //die 30 kann sich ändern, daher müsste ich jedesmal aus der DB lesen.
end;

procedure TForm1.AutoAbmeldenTimer(Sender: TObject);
begin
  for i := 0 to Counter do
    begin
      ..
      Counter -1;
    end;
  Abmelden.Click;
end;
Der Counter kann eine Variable deines Forms sein - nicht Global.
Was soll die Schleife ?

Delphi-Quellcode:
type
  TForm1 = class(TForm)
   ...
   FCounter: integer;
   FCounterStart: integer;
   ...
  end;

procedure TForm1.OnCreate (Sender:TObject);
begin
  FCounterStart := AusDBGelesen;
  FCounter := FCounterStart;
end;

procedure TForm1.Anmelden;
begin
  FCounterStart := AusDBGelesen; // auch hier möglich und sinnvoll.
  FCounter := FCounterStart;
end;

procedure TForm1.OnMouseMove(...);
begin
  FCounter := FCounterStart;
end;

procedure TForm1.AutoAbmeldenTimer(Sender:tObject);
begin
  if FCounter > 0 then
  begin
    dec(FCounter);
    if FCounter = 0 then
       Abmelden;
  end;
end;
Ich verwende in meinen Programmen gerne Actionlists. Hier kann man prima ein OnAction Event programmieren, bei dem man den FCounter wieder auf FCounterStart zurücksetzt. Da braucht man keinen Hook, kein OnMouseMove oder onKeypress. Man kann natürlich auch alle drei verwenden um den FCounter zu retriggern.

Gruss
Thomas Kerkmann
Ich hab noch einen Koffer in Borland.
http://thomaskerkmann.wordpress.com/
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#10

Re: Automatisch abmelden von Benutzer nach Zeit ohne Handlun

  Alt 19. Sep 2009, 15:28
Mehr Infos zu

LASTINPUTINFO: Wenn kein keybd_event und kein mouse_event erfolgt, wird ein Zähler hochgezählt.
Wird ein gewählter Zählerstand (z.B. 100 000 = 100 sec) erreicht (Timer-Abfrage) , wird die WINDOWS-Funktion
LockWorkStation ausgelöst. Alle Programme laufen weiter, aber Tastatur- und Maus-Aktionen werden ohne
Neuanmeldung ignoriert.

http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx
http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx


Der Zählerstand wird auf 0 gesetzt mit dem Befehl mouse_event(0,0,0,0). Den kann man z.B. einfügen (if HIDexist then mouse_event(0,0,0,0)... , wenn der User einen bestimmten USB-Stick benutzt (HID: hiddev.ProductName, hiddev.Attributes.VendorID, hiddev.Attributes.ProductID, hiddev.SerialNumber). Entfernt der User den Stick, wird ein OnRemoval-Ereignis ausgelöst und LockWorkStation wird aktiv.
  Mit Zitat antworten Zitat
Antwort Antwort


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 02:55 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