博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[转]GetLastInputInfo计时用户离开电脑及软件在指定时间锁定等
阅读量:5900 次
发布时间:2019-06-19

本文共 1999 字,大约阅读时间需要 6 分钟。

   计时键盘、鼠标处于空闲状态的时间,不清楚计时其他电脑I/O设备的空闲状态不?

  所以呢,这个函数使用方面很广,可以计时用户离开电脑之后的延展作用,比如屏保和当用户离开时软件自动锁定。我在网上找到一个源码,实现软件在用户未操作电脑到时后自动锁定,见下文:
  

/************************************************************************/ /* 说明: 调用函数GetLastInputInfo()以后, 结构成员lpi.dwTime 中的值并非上次输入事件 发生以后的毫秒数。而是上次输入事件发生时的系统运行时间。相当于上次输入事件 发生时执行了lpi.dwTime=::GetTickCount()。 ::GetTickCount()-lpi.dwTime才是上次输入事件发生以后的毫秒数。 */ /************************************************************************/ //注意:windows2000以上系统才支持函数GetLastInputInfo()因此有可能需要在StdAfx.h中加上如下语句: #define _WIN32_WINNT 0x0500 //或者: #ifdef _WIN32_WINNT #undef _WIN32_WINNT #endif #define _WIN32_WINNT 0x0500 //首先定义一个计时器计时事件的定义 #define  GETLASTINPUTINFO  109 //然后写一个Time计时器(具体计时器的生成步骤就不在叙述) //1、在程序初始化的时候调用 m_uGetLastInputInfo = SetTimer(GETLASTINPUTINFO, 500, NULL);//设置获取键盘和鼠标处于空闲状态的时间的计时器 //2、处理函数 void CNetAppSoftDlg::OnTimer(UINT nIDEvent) {
LASTINPUTINFO lpi; DWORD dwTime = 0; switch(nIDEvent) {
case GETLASTINPUTINFO://zhouzx 获取键盘和鼠标处于空闲状态的时间 lpi.cbSize = sizeof(lpi); GetLastInputInfo(&lpi);//关于此windows API接口的介绍,参见同文件夹下的文档 dwTime = ::GetTickCount()-lpi.dwTime; if (dwTime >= 30000)//30秒 {
if (m_uGetLastInputInfo) {
KillTimer(GETLASTINPUTINFO); } OnBnClickedButtonLock(); } break; default: break; } CDialog::OnTimer(nIDEvent); } //3、在软件解锁后的地方重新开始新的计时 m_uGetLastInputInfo = SetTimer(GETLASTINPUTINFO, 500, NULL); //4、在推出软件的时候,如果计时器没有停止,要关闭计时器 if (m_uGetLastInputInfo) {
//结束获取键盘和鼠标处于空闲状态的时间定时器 KillTimer(GETLASTINPUTINFO); }

  提醒一下,对于计时器一定要注意释放资源,killtimer多调用几次没有关系,程序不会崩溃。调用了N次Settimer,就得调用>=N次Killtimer。

  我之前在一家公司实习,写了一个模块,功能是传递一个句柄,然后监视用户对这个句柄所代表的窗体未操作计时,时间到达指定数值后执行预设操作。如果句柄为一个窗体,而窗体里面还有子窗体(包括控件),若是对子窗体操作,那么也算是对指定句柄窗体的操作,这时不会计时。当操作指定句柄窗体的同级窗体或父窗体,那么计时会生效。当然,这个也包括用户离开电脑的计时。因为不涉及机密,所以我就把源码放在下面。使用方法是用类生成一个对象,然后用对象CreateWindow创建一个隐藏窗体,利用这个隐藏窗体监视指定句柄窗体,当然我不太清楚我这个类的使用开销是如何的,欢迎指教,预设操作用回调函数实现。可自行修改回调函数接口。
  源码下载:

【参考资料 感谢作者】

 

转载地址:http://aqhsx.baihongyu.com/

你可能感兴趣的文章
如何处理IT事件管理以避免混乱
查看>>
物联网确保消费者隐私安全 才能起飞
查看>>
揭秘使用免费WiFi的真实代价
查看>>
《交互式程序设计 第2版》一2.3.2 数组
查看>>
移动互联网金融app 存在信息安全问题
查看>>
Android 开发中使用 SQLite 数据库
查看>>
Android后门GhostCtrl,完美控制设备任意权限并窃取用户数据
查看>>
IBM郭继军:机器学习配合行业经验将帮助企业成就未来
查看>>
Rambus9000万美元收购Inphi存储器互联业务
查看>>
《BackTrack 5 Cookbook中文版——渗透测试实用技巧荟萃》—第3章3.6节识别操作系统...
查看>>
linux系统防火墙iptables命令规则及配置的示例
查看>>
10 个顶尖的 Linux 开源人工智能工具
查看>>
Firefox 跟踪保护技术将页面加载时间减少 44%
查看>>
聚合(根)、实体、值对象精炼思考总结
查看>>
java解析虾米音乐
查看>>
rails将类常量重构到数据库对应的表中之三
查看>>
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
查看>>
mysql 多行合并函数
查看>>
【案例】RAID卡写策略改变引发的问题
查看>>
[Django学习]如何得到一个App
查看>>