![]() |
Automatisch abmelden von Benutzer nach Zeit ohne Handlung
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:
Danke schon mal für Eure antworten.
Keine Aktivität mehr
TimerAutoAbmelden.Enabled := true; Erneute Aktivität TimerAutoAbmelden.Enabled := false; procedure TForm1.AutoAbmeldenTimer(Sender: TObject); begin Abmelden; end; Gruß Jens |
Re: Automatisch abmelden von Benutzer nach Zeit ohne Handlun
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. |
Re: Automatisch abmelden von Benutzer nach Zeit ohne Handlun
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 |
Re: Automatisch abmelden von Benutzer nach Zeit ohne Handlun
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. |
Re: Automatisch abmelden von Benutzer nach Zeit ohne Handlun
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; |
Re: Automatisch abmelden von Benutzer nach Zeit ohne Handlun
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:
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:
Gruß Jensprocedure 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; |
Re: Automatisch abmelden von Benutzer nach Zeit ohne Handlun
Was ist gegen die Lösung von hathor einzuwenden?
|
Re: Automatisch abmelden von Benutzer nach Zeit ohne Handlun
Zitat:
Gruß Jens |
Re: Automatisch abmelden von Benutzer nach Zeit ohne Handlun
So hab ich das aber nicht gemeint:
Delphi-Quellcode:
Der Counter kann eine Variable deines Forms sein - nicht Global.
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; Was soll die Schleife ?
Delphi-Quellcode:
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.
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; Gruss |
Re: Automatisch abmelden von Benutzer nach Zeit ohne Handlun
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. ![]() ![]() 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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz