Har*_*riv 27 windows delphi user-inactivity
如何在Windows应用程序中检测非活动(空闲)用户?当用户在一段时间内没有任何输入(键盘,鼠标)时,我想关闭应用程序.
Jam*_*ell 45
要跟踪用户的空闲时间,您可以挂钩键盘和鼠标活动.但请注意,安装系统范围的消息挂钩是一件非常具有侵入性的事情,如果可能应该避免,因为它需要将钩子DLL加载到所有进程中.
另一种解决方案是使用GetLastInputInfoAPI函数(如果您的应用程序在Win2000(和更高版本)计算机上运行).
GetLastInputInfo检索最后一个输入事件的时间(以毫秒为单位)(当收到上次检测到的用户活动时,无论是键盘还是鼠标).
这是一个简单的例子.该SecondsIdle函数返回一个没有用户活动的秒数(在组件OnTimer事件中调用TTimer).
~~~~~~~~~~~~~~~~~~~~~~~~~
function SecondsIdle: DWord;
var
liInfo: TLastInputInfo;
begin
liInfo.cbSize := SizeOf(TLastInputInfo) ;
GetLastInputInfo(liInfo) ;
Result := (GetTickCount - liInfo.dwTime) DIV 1000;
end;
procedure TForm1.Timer1Timer(Sender: TObject) ;
begin
Caption := Format('System IDLE last %d seconds', [SecondsIdle]) ;
end;
Run Code Online (Sandbox Code Playgroud)
http://delphi.about.com/od/adptips2004/a/bltip1104_4.htm
Tom*_*sen 10
您可能希望看到这个问题的答案:如何判断Windows何时处于非活动状态[1],基本相同的问题解决方案建议使用GetLastInputInfo[2] API调用.
这篇文章也解释了一些方面:( 代码项目)如何在C#[3]中使用和不使用平台调用来检查用户是否不活动
[1] 如何判断Windows何时处于非活动状态
[2] http://msdn.microsoft.com/en-us/library/ms646302%28VS.85%29.aspx
[3] http://www.codeproject.com /KB/cs/uim.aspx
当屏幕保护程序即将启动时,您的应用程序将收到一条WM_SYSCOMMAND带有SC_SCREENSAVE命令ID 的消息.这样做了吗?SC_MONITORPOWER监视器即将空白时也有命令ID(也是WM_SYSCOMMAND消息).
编辑:查看评论,看起来您不关心用户是否是无效的,而是您的应用程序是否处于非活动状态.
这很简单.如果您的应用程序已最小化,则用户不会与其进行交互.如果您的应用程序不是前台应用程序,那么这也是一个很好的启动器.
您还可以注意泵中的消息,注意是否有任何用户输入消息到您的应用程序,在C++中添加代码到泵是微不足道的,在delphi中,您可以使用WH_GETMESSAGE挂钩监视泵挂钩到消息TApplication实现的循环.或者GetLastInputInfo
| 归档时间: |
|
| 查看次数: |
20392 次 |
| 最近记录: |