zoukankan      html  css  js  c++  java
  • 判断软件的闲置时间(使用Application.OnMessage过滤所有键盘鼠标消息)

    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

  • 相关阅读:
    Quartz
    WebService
    JavaMail
    安装phpnow服务[Apache_pn]提示失败的解决方法
    idea安装激活
    csdn下载
    java解析json串常识
    Oracle错误——ORA-03113:通信通道的文件结尾
    SSM(Maven集成)
    SpringMVC的拦截器
  • 原文地址:https://www.cnblogs.com/findumars/p/4748574.html
Copyright © 2011-2022 走看看