AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Realisierung Programm wurde gewisse Zeit nicht bedient ?
Thema durchsuchen
Ansicht
Themen-Optionen

Realisierung Programm wurde gewisse Zeit nicht bedient ?

Ein Thema von RalfE · begonnen am 27. Jan 2011 · letzter Beitrag vom 28. Jan 2011
Antwort Antwort
Seite 1 von 3  1 23      
RalfE

Registriert seit: 30. Apr 2010
25 Beiträge
 
#1

Realisierung Programm wurde gewisse Zeit nicht bedient ?

  Alt 27. Jan 2011, 10:13
Hallo,

Delphi 7

Wie kann man in einem Delphi-Programm realisieren,
dass ein Programm vom Benutzer x-Stunden nicht benutzt(bedient) wurde ?

Zeit sollte einstellbar sein , nach dieser Zeit
der "Ruhe" sollte ein Ereignis ausgelöst werden.

Danke.

Gruss
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Realisierung Programm wurde gewisse Zeit nicht bedient ?

  Alt 27. Jan 2011, 10:43
Das kommt darauf an, wie man "nicht benutzen/bedient" für die Anwendung definiert

Schau dir mal Delphi-Referenz durchsuchenTApplicationEvents an, das feuert viele Events, anhand derer man das festmachen könnte.

Das IdleEvent kommt dann von einem Timer der auf der MainForm liegt (z.B. IdleTimer) mit dem gewünschten Intervall (z.B. 60000ms)

Den Timer bei einer Aktion so zurücksetzen:
Delphi-Quellcode:
IdleTimer.Enabled := False;
IdleTimer.Enabled := True;
Wenn das mit den ApplicationEvents nichts bringt, dann musst du bei jeder Aktion die du als "der Benutzer arbeitet mit meiner Anwendung" den Timer zurücksetzen.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#3

AW: Realisierung Programm wurde gewisse Zeit nicht bedient ?

  Alt 27. Jan 2011, 10:54
Es gibt zwei grudsätliche Möglichkeiten

- Du startest einen Timer mit dem "Timeout" und immer wenn der Benutzter was macht (bediehnt) startest du diesen Timer neu (Enable auf False und wieder auf True).
ist die Zeit abgelaufen löst der Timer nun seine Ereignismethode aus.

- Immer wenn der Benutzer etas macht, wird eine Variable auf die aktuelle Zeit gesetzt
und nebenbei läuft ein Timer Timer (z.B. mit einem Minutenintervall), worin wird die Zeit der letzen Bediehnung mit der aktuellen Zeit verglichen wird.
Ist die Zeit abgelaufen (Differentz groß genug, dann löst du das Ereignis aus.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: Realisierung Programm wurde gewisse Zeit nicht bedient ?

  Alt 27. Jan 2011, 12:09
eine elegante Version wurde hier vor einiger Zeit gepostet.
Delphi-Quellcode:
function LastInput: DWord;
var LInput: TLastInputInfo;
begin
  LInput.cbSize := SizeOf(TLastInputInfo);
  GetLastInputInfo(LInput);
  Result := GetTickCount - LInput.dwTime;
end;


procedure TForm2.Timer1Timer(Sender: TObject);
begin
   Caption := IntToStr(LastInput);
end;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#5

AW: Realisierung Programm wurde gewisse Zeit nicht bedient ?

  Alt 27. Jan 2011, 12:44
MSDN-Library durchsuchenGetLastInputInfo gibt an, wann zuletzt Benutzereingaben im Windows eingingen.
Wenn man nun in einem anderem Programm was macht, dann wird das ja auch mitgezählt, wärend das eigene Programm schon seit Tagen untätig sein könnte.

Aber vielleicht reicht das ihm ja aus.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#6

AW: Realisierung Programm wurde gewisse Zeit nicht bedient ?

  Alt 27. Jan 2011, 12:53
Eine weitere Möglichkeit (nicht ausführlich getestet):
Delphi-Quellcode:
var
  LastInputTime: DWord;

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
begin
  Case Msg.Message of
    WM_KEYFIRST..WM_KEYLAST, WM_MOUSEFIRST..WM_MOUSELAST:
      If Msg.Message <> WM_MOUSEMOVE then LastInputTime := GetTickCount;
  end;
end;
Ob das nun so schlau ist, sich ins OnMessage-Event einzuklinken ... ka
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#7

AW: Realisierung Programm wurde gewisse Zeit nicht bedient ?

  Alt 27. Jan 2011, 13:06
@himitsu
berechtigter Einwand, lässt sich aber berücksichtigen:
Delphi-Quellcode:
  public
    { Public-Deklarationen }
    FIdle:Dword;
    FLTC:Cardinal;
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

function TForm2.LastInput: DWord;
var LInput: TLastInputInfo;
tc:Cardinal;
begin
  LInput.cbSize := SizeOf(TLastInputInfo);
  GetLastInputInfo(LInput);
  tc := GetTickCount;
  if FLTC=0 then FLTC := getTickCount;

  if Application.Active then
      FIdle := tc - LInput.dwTime
  else
    begin
    FIdle := FIdle + TC - FLTC ;
    end;
  FLTC := TC;
  Result := FIdle;
end;

procedure TForm2.Timer1Timer(Sender: TObject);
begin
    Caption := intToStr(LastInput);
end;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#8

AW: Realisierung Programm wurde gewisse Zeit nicht bedient ?

  Alt 27. Jan 2011, 13:36
Es gibt echt noch Leute die MSDN-Library durchsuchenGetTickCount benutzen ohne sich der Tatsache bewußt zu sein daß Windowssysteme immer länger laufen und immer zuverlässiger werden?
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#9

AW: Realisierung Programm wurde gewisse Zeit nicht bedient ?

  Alt 27. Jan 2011, 13:39
hi, lasst den TE doch erst mal auf die vielen Angebote antworten
Noch weiss ja keiner so richtig wie er dies meint?
Hallo,
...dass ein Programm vom Benutzer x-Stunden nicht benutzt(bedient) wurde ?
....
Meint er nun sein Prog, oder evtl allg Programme in Windows?

Zumal sich ja hier auch die Frage aufwirft, das man eigtl wissen sollte, was man auf seinem Rechner noch alles selber gestartet hatt. Und wenn ich was anderes machen soll/muss, ich alles beende wenn ich den Platzt verlasse.
Da nützt mir auch nicht, das mir (m)ein Prog mitteilt, das ich x Stunden nix mehr am Prog/Rechner gemacht habe oder sogar den Rechner runterfährt(Datenverlust mit eingeschlossen )
Nur weil was auch immer mich daran hindern sollte, Programme die ich nicht mehr brauche auch zu beenden

Gruss alfold
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#10

AW: Realisierung Programm wurde gewisse Zeit nicht bedient ?

  Alt 27. Jan 2011, 13:43
Übrigens, ist MSDN-Library durchsuchenWM_ENTERIDLE nicht auch ein gangbarer Weg? Könnte auch über einen Hook für andere Fenster abgefangen werden ...
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 06:46 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