Wie kann man ein Programm, nachdem es einige Minuten keine Ereignisse (Mausklicks, Tastaturereignisse) erhalten hat, übergeordet schließen. Dabei soll dies möglich sein, egal welches Formular zu diesem Zeitpunkt geöffnet ist.
Announcement
Collapse
No announcement yet.
Programm soll automatisch schließen
Collapse
X
-
Hallo,
das Ereignis OnIdle ist für die Verarbeitung von bestimmten Sachen im Hintergrund vorgesehen (d.h. wenn die Anwendung nichts besseres zu tun hat). Auch ApplicationEvents führt nicht zum Ziel, da ein laufender Prozess mit einem sichtbaren Hauptfenster von Windows regelmässig mit Botschaften eingedeckt wird.
Statt dessen muss das Hauptfenster (oder der gerade aktive Dialog) selbst über einen Timer die Benutzeraktionen (Tastatureingaben, Mausklicks) auswerten, um beim Überschreiten der Wartezeit die Anwendung über Close zu beenden. Jede Benutzeraktion setzt den Timer zurück
Comment
-
@Jochen:<BR>
Man könnte zwar mit OnIdle einen Timer starten, aber wie soll dieser gestoppt werden, wenn eine Tastatur- oder Mausereignis eintritt?
Ein systemweiter Hook geht nicht, weil ich Aktivitäten in MEINEM Programm ermitteln will.
<BR>
<BR>
@Andreas:<BR>
Meine Überlegungen wurden von dir bestätigt. Ziel ist es, nach einer bestimmten Zeit der Inaktivität eine Aktion auszuführen, z.B. Fenster/Prog. schließen, aus DB ausloggen o.ä.
Dafür wäre eine ZENTRALE Stelle zur Auswertung der Tastatur- und Mausaktivitäten interessant.
ABER WO IST DIE?
<BR>
<BR>
Hilfe erwünscht.
<BR>
Gruß Gunna
Comment
-
Hallo,
>ABER WO IST DIE?
wenn Performanz keine Rolle spielt, kann sich die Anwendung in <b>Application.OnMessage</b> einklinken (entweder von Hand oder über TApplicationEvents), um dort die Tastatus- und Maus-Botschaften auszuwerten:
<pre>
<b>procedure</b> TForm1.ApplicationEvents1Message(<b>var</b> Msg: tagMSG;
<b>var</b> Handled: Boolean);
<b>begin</b>
<b>if</b> Msg.Message = WM_CHAR <b>then</b>
Listbox1.Items.Add(<font color="#9933CC">'Tastatur erkannt'</font>);
<b>end</b>;
</pre>
Wie ein Test zeigt, wird die Listbox im Hauptfenster auch dann gefüllt, wenn der Anwender seine Eingaben in einem anderen (modal angezeigten) Formular macht. Da aber das Ereignis <b>OnMessage</b> (genauer gesagt, die beim Erzeugen des TApplication-Hilfsfensters angemeldete Fensterprozedur) von Win32 sehr häufig bedient wird, sollte der dort untergebrachte Teil so wenig Rechenzeit wie nur möglich benötigen, wenn die Anwendung nicht mit angezogener Handbremse laufen soll
Comment
Comment