怎么判断一个程序有多长时间没有进行过操作了(100分)

  • 主题发起人 主题发起人 wsy18
  • 开始时间 开始时间
W

wsy18

Unregistered / Unconfirmed
GUEST, unregistred user!
我想判断程序如果很长一段时间没有进行过任何操作就自动关闭.怎么实现阿!
 
在退出程序的时候写时间到某个地方,然后在启动程序的时候读出不就可以了

 
你理解错了,不是问程序多久没有启动了!
程序是客户端的,比如客户端超过一段时间没有进行任何操作就把程序进行关闭,
我就是想怎么判断程序没有进行操作!
 
能不能用keydown件事+定时器, 有键输入时就重新置定时器的时间,
 
我有一个DEMO,需要的话就留个EMAIL吧,用的是检测鼠标键盘的消息的办法
 
如果你的程序是有GUI的话
可以截获键盘鼠标消息。是控制台或者是服务形态的话,我就不知道了
下面是截获键盘鼠标消息的例子:
unit Unit1;

interface

uses
DateUtils, ExtCtrls,
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
Oclock:TTimer;
IdleTimeLimited:Integer;
LastActTime:TDateTime;
procedure ApplicationEventsMessage(var Msg: tagMSG;
var Handled: Boolean);
procedure TimerTimer(Sender: TObject);
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ApplicationEventsMessage(var Msg: tagMSG;
var Handled: Boolean);
begin
//如果已经定义主系统的Application的OnMessage事件则先调用;

//处理键盘、鼠标消息
if ((Msg.message >= WM_KEYFIRST) and (Msg.message <= WM_KEYLAST)) or
((Msg.message >= WM_MOUSEFIRST) and (Msg.message <= WM_MOUSELAST))then
LastActTime := now;

end;

procedure TForm1.TimerTimer(Sender: TObject) ;
begin
//如果键盘、鼠标在指定的时间内没有消息,调用处理事件
if SecondsBetween(now,LastActTime) > IdleTimeLimited then Begin
LastActTime := now;
ShowMessage('本程序未活动时间超过'+IntToStr(IdleTimeLimited)+'秒!');
//你可以在这写关闭程序事件
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
LastActTime := now;
IdleTimeLimited := 3;
Oclock := TTimer.Create(self);
Oclock.Enabled := True;

//设置时间控件的时间事件
Oclock.OnTimer := TimerTimer;
Application.OnMessage := ApplicationEventsMessage;


end;

end.


 
谢谢了!
程序是MDI的,如果keydown的事件的是在主窗体的话,当前窗体是子窗体 ,可以吗?
Ferrari18@263.net
 
发给你了
 
同意天河
 
后退
顶部