首页 > 移动平台 > 详细

判断软件的闲置时间(使用Application.OnMessage过滤所有键盘鼠标消息)

时间:2015-08-21 19:20:18      阅读:285      评论:0      收藏:0      [点我收藏+]

GetLastInputInfo是检测系统输入的,应用到某个程序中不合适!

此问题有二种解法来监控输入消息:

1.用线程级HOOK,钩上MOUSEHOOK与KEYBOARDHOOK

2.在Application.OnMessage中做处理

显然,用第2种方法比较方便!

众所周知,键盘与鼠标消息都是队列消息,需要经过消息队列后经过一些处理,再发往各个WNDPROC。基于这个原理,我们可以在ONMESSAGE中做一下消息处理,即先声明全局变量,用于保存上次输入动作的时间,而后用时间控件来进行定时扫描,用GetTickCount来判断是否超时。

unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, AppEvnts, ExtCtrls, StdCtrls;
type
  TForm1 = class(TForm)
    ApplicationEvents1: TApplicationEvents;
    tmr1: TTimer;
    edt1: TEdit;
    procedure ApplicationEvents1Message(var Msg: tagMSG;
      var Handled: Boolean);
    procedure tmr1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
  ElapsedTime:Longint;
implementation
{$R *.dfm}
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
  case Msg.message of
    WM_KEYDOWN,WM_LBUTTONDOWN,WM_LBUTTONUP://各种键盘与鼠标消息
    begin
      ElapsedTime:=GetTickCount;
      //Handled:=True;这里不要把Handled设置为True,否则消息就不分发至WNDPROC了
    end;
  end;
end;
procedure TForm1.tmr1Timer(Sender: TObject);
begin
   if GetTickCount- ElapsedTime>60000 then
   begin
     tmr1.Enabled:=false;
     ShowMessage(1分钟软件没有操作了);
   end;
end;
end.

参考:http://www.cnblogs.com/key-ok/p/3358918.html

判断软件的闲置时间(使用Application.OnMessage过滤所有键盘鼠标消息)

原文:http://www.cnblogs.com/findumars/p/4748574.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!