判断软件的闲置时间(使用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

时间: 2024-11-06 07:26:10

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

转:如何判断软件功能特性的依赖

软件功能之间的关系大致有三种: 1. 彼此独立  这些功能就是打死不相干的,变更其中一个地方,另外的地方也不受影响,包括在输入上独立,输出显示上独立和数据独立: 2. 调用和被调用  可能在某些应用程序中,有函数或dll的调用,那么如果被调用的特性被修改了,调用这个的地方都需要做覆盖性测试,当然这种情况肯定会发生一件事:就是共享输入数据: 3. 数据共享  如果某些功能间并没有函数调用与被调用的关系,但是在数据处理时有交叉点,可能是对输入数据的共享,可能是输出时在同一个区域显示.那么这种情况也需

灵玖软件Nlpir Parser语义智能内容过滤

Internet是全球信息共享的基础设施,是一种开放和面向 所有用户的技术.它一方面要保证信息方便.快捷的共享;另一方面要防止垃圾信息的传播.网络内容分析是一种管理信 息传播的重要手段.它是网络信息安全核心理论与关键技术 研究网络内容分析所涉及的新理论.新体系结构.新方法和新技术. 内容过滤技术一般包括名单过滤技术.关键词过滤技术.图像过滤技术.模板过滤技术和智能过滤技术等.目前,内容过滤技术还处于初级阶段,实用的技术相对比较单一,主要表现在名单过滤和关键词过滤技术,而图像过滤与模板过滤技术还处

判断软件是不是第一次启动

在打开一个软件的时候我们都要有一个简单地引导页面或者欢迎界面,引导页面可以帮助用户清楚的了解出软件的使用,提高用户对软件的感观. 在AppDelegate.m文件中 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ self.window = [[UIWindow alloc] initWithFrame:[[UIScreen

BCB 如何让Application收到SendMessage发送来的消息

一般,都是通过添加一个ApplicationEvent组件就可以接收到PostMessage发来的消息,那么如何收到SendMessage发来的消息呢? https://stackoverflow.com/questions/49862883/sendmessage-to-application-handle-not-working Application有一个Application->HookMainWindow方法 它的参数是这样的事件函数 bool __fastcall CLASSNAME

QuickTime是什么软件?Mac 上 QuickTime Player 中的键盘快捷键和手势分享

QuickTime是一款Mac系统的内置媒体播放器!QuickTime 新建影片录制快捷键是什么?循环播放影片快捷键是什么?影片播放手势?如果你知道一些使用QuickTime的快捷键和手势,在使用该软件时可以快速完成多项操作任务.今天给大家带来的Mac 上 QuickTime Player 中的键盘快捷键和手势分享,满满的都是干货,相信你一定会喜欢! Mac QuickTime Player 中的快捷操作 一.基本任务的快捷键 Option-Command-N 新建影片录制Control-Opt

ssh跳板登陆太麻烦,使用expect每次自动登录 利用expect 模拟键盘动作,在闲置时间之内模拟地给个键盘响应

#!/usr/bin/expect -f #设置超时时间 set timeout 3 #这里设置了跳板机的密码 set password "你的跳板机密码" #连接跳板机 spawn ssh 用户名@跳板机IP #如果返回的内容包含*yes/no*,发送yes expect "*yes/no*" {send "yes\n"} #如果返回的内容包含"*password*",发送你设置的密码+\r(PS.这里的\r一定要加,是回车

MFC Wizard创建的空应用程序中各个文件内容的解析

创建的MFC应用程序名为:wd,那么: 一.wd.h解析 // wd.h : main header file for the WD application // #if !defined(AFX_WD_H__89BE48D2_F377_4DF1_8C44_4D7372A61CE0__INCLUDED_) #define AFX_WD_H__89BE48D2_F377_4DF1_8C44_4D7372A61CE0__INCLUDED_ //////////////////////////////

反模拟类游戏外挂 转

https://bbs.pediy.com/thread-178926.htm 普通模式调用SendMessage.PostMessage,增强模式调用keybd_event,mouse_event. SendInput发送键盘鼠标消息.只要HOOK 内核层的NtUserPostThreadMessage.NtUserPostMessage.NtUserMessageCall.NtUserSendInput这几个API,并在其中判断发送的目的地址是否为我们要保护的进程就行了.附件中代码使用Hoo

AHK教程 - imsoft.cnblogs

转自:小弗兰茨 AHK,就是传说中的 Auto Hot Key .什么?没有听说过?那么很正常……它运行在Windows下.总之,AHK可以赋予你对你的电脑的无与伦比的控制力.一些人想要在MM面前展示技术的,我是说很炫的技术——一般人能看懂的技术的,那么学一学AHK吧. 快速入门之:开始 首先,你需要去下载AHK,我想这个不用我告诉你了.搜索一下吧,很容易找到的. 快速入门之:脚本 AHK是靠脚本中写的东西来执行的.所以我们必须得有一个脚本.脚本就是普通的txt文件类型的,但后缀名必须是 .ah