Jak wykryć nieaktywnośc użytkownika (czyli że nie rusza myszką, nie naciska klawiszy) ?? Założmy że chce po minucie nieaktywności uruchomić jakąś procedurę (coś jak automatyczna zmiana statusu w GG). Czy istnięją jakieś funkcje do tego (bo przecież windows stosuje to przy uruchamianiu wygaszacza) [???]
Możesz zrobić tak:
Zakładam, że pocedura DoSomething zostanie wykonana po stwierdzeniu, że użytkownik "był nieaktywny" przez 1 minutę.
Dodaj do programu Timera.
Interval Timera ustaw na 60 000 (1 minuta).
Kliknij 2x na Timerze i wpisz:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
DoSomething;
end;
Dodaj jedną metodę do klasy głównego formularza:
type
TFormMain = class(TForm)
....
procedure AppMessage(var Msg: TMsg; var Handled: Boolean);
....
end;
Definicja AppMessage:
procedure TForm1.AppMessage(var Msg: TMsg; var Handled: Boolean);
begin
if (Msg.message = WM_MOUSEMOVE) or (Msg.message = WM_KEYDOWN) then
begin
Timer1.Enabled := False;
Timer1.Enabled := True;
end;
Handled := False;
end;
W FormCreate dodaj:
Application.OnMessage := AppMessage;
Niezły sposób, tyle że ma jedną wadę. Wykrywa naciśnięcia klawiszy i ruchy myszki tylko w obrębie formy. A ja chce żeby mi wykrywał całą aktywność użytkownika w sytuacji kiedy okno mojego programu nie bedzie widoczne.
Pochwalony! Można spróbować założyć hook'a na mysz i klawiaturę. Przykład masz w FAQ :)