Wykrywanie nieaktywności u?żytkownika

0

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) [???]

0

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;

0

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.

0

Pochwalony! Można spróbować założyć hook'a na mysz i klawiaturę. Przykład masz w FAQ :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1