If you want to detect user inactivity even if your application is in
background (has no focus), it’s really simple. You can achieve this
using
GetLastInputInfo
function.
This function is a standard Windows API function since Windows 2000
(it means it’s not compatible with Win9x generation). For more info
about GetLastInputInfo, visit Microsoft Developer Network.
The function returns the time of last input (keyborad, mouse) in
miliseconds. So just compare this value with actual time and you have
idle time as result.
Put Label and Timer components on application Form and set OnTimer
event as below. Label will show idle time since last input in seconds.
Try to move mouse or press some keys to see how detection works.
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Timer1: TTimer; Label1: TLabel; procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} function IdleTime: DWord; var LastInput: TLastInputInfo; begin LastInput.cbSize := SizeOf(TLastInputInfo); GetLastInputInfo(LastInput); Result := (GetTickCount - LastInput.dwTime) DIV 1000; end; procedure TForm1.Timer1Timer(Sender: TObject); begin Label1.Caption := Format('System idle time: %d s', [IdleTime]); end; end.
Δεν υπάρχουν σχόλια:
Δημοσίευση σχολίου