前两天刚发帖子问了下,“一段时间内用户不动作就自动回到登陆界面”这个问题,经过大家提醒和自己的搜索,借用了一个前辈的方案如下:
在全局动作中每隔5分钟去捕捉一下键盘和鼠标事件(前辈所写代码,原帖请见:http://www.ad.siemens.com.cn/club/bbs/post.asp?b_id=5&a_id=138317&s_id=0&num=10#anch),然后判断是否在此期间发生了动作,如果没发生动作就跳转回登陆界面。
但发现了以下问题:
因为项目一激活就开始全局动作执行,但用户不一定会在项目一激活就登陆系统,所以当用户登陆时可能是处在某个周期的末端(比如:4分30秒),那么用户一登陆进去30秒之后系统就会自动返回登陆界面,所以本来设置的是5分钟返回,但经常是运行了不到5分钟就返回了
基于以上问题我想这样来做:只有在用户登陆的时候去让触发器开始运行,而不是项目激活的时候就开始运行。请问这个可以作到吗?
再请大家看看以下城斑竹写的代码中有没有错误,我C比较差,有点看不懂,方便的话加个注释。呵呵
BOOL GetMouseKeyStatus()
{
typedef struct tagLASTINPUTINFO {
UINT cbSize;
DWORD dwTime;
} LASTINPUTINFO, * PLASTINPUTINFO;
#pragma code("user32.dll");
BOOL GetLastInputInfo(PLASTINPUTINFO plii);
#pragma code();
BOOL bRet = FALSE;
static long oldtime;
LASTINPUTINFO tim;
tim.cbSize=sizeof(LASTINPUTINFO);
GetLastInputInfo(&tim);
if(oldtime != tim.dwTime)
{
oldtime = tim.dwTime;
bRet = TRUE;
}
return bRet;
}
函数返回FALSE:表示未发生鼠标和键盘事件
返回TRUE:表示发生了鼠标或键盘事件