在应用程序空闲时执行操作

我有一个非常简单的应用程序,一个窗体,一个丰富的菜单。 我试图自动保存文本在财富和执行其他任务,但只有当应用程序闲置 – 当用户不写或应用程序失去焦点或任何。

我试图从互联网上的gazillion示例代码中创build一个OnIdle事件处理程序,但是相反,它在我使用应用程序时激活。 这个链接就是一个例子。

我也提供了一个计时器,并检查用户最后一次写入富有的时间,但是如果可能的话,我宁愿不使用计时器。

任何人都知道如何检测应用程序是否处于空闲状态,并在运行时运行一些代码? 我正在使用delphi7。

我也会推荐一个定时器,但是会响应任何发生在富有的键盘事件而“重置”倒计时(切换,然后再打开)。 这样,用户在尝试输入时就不会保存。

正如Andreas指出的那样,下面是如何真正实现这个: 每当用户执行一些操作时,例如改变编辑器的插入位置,执行Timer1.Enabled:= false; Timer1.Enabled:= true。 这将重置计时器。 实际上,定时器将不会触发,直到最后一个Timer1.Interval毫秒内没有用户活动

你可能最好用定时器。 OnIdle会经常开火。 我相信这个信息意味着队列中的所有信息都被处理了。 所以每当你有消息处理完成,一个OnIdle被触发。

你可以做的是在丰富的编辑中的每个OnChange事件之后设置一个时间戳的变量。 然后,使用计时器,每隔X秒检查一次,看看该时间戳是否超过5秒。 如果是的话,那么就保存吧。

 function GetIdleTime:DWORD; var lastI : TLastInputInfo; begin lastI.cbSize := SizeOf(lastI); GetLastInputInfo(lastI); Result := (gettickcount - lastI.dwTime) div 1000; end; procedure TForm1.Timer1Timer(Sender: TObject); begin if GetIdleTime = 60 then Memo1.savetofile('C:\jgs.tmp'); end; 

用这个