anythinging 发表于 2019-10-21 18:59:34

【已解决】关于检测空闲时间运行的问题

本帖最后由 anythinging 于 2019-10-23 21:16 编辑

各位朋友,我想请教5秒钟键鼠空闲我会实现了,但如果在此基础上,再等5秒运行其它程序比如关机,求指点!

While 1
      Local $iIdleTime1 = _Timer_GetIdleTime()
      if $iIdleTime1 >5000 Then
                MsgBox(0,'','超过5秒没操作了',1)
                ;如果再空闲5秒钟,就关机

                Local $iIdleTime2 = _Timer_GetIdleTime()
                If $iIdleTime2 > 5000 Then
                        MsgBox(0,'','开始关机',1)
                EndIf

      EndIf
WEnd

个人觉得应该是在第二个检测空闲的时候将后台空闲的计时器清零,但尝试_Timer_SetTimer
,_Timer_KillAllTimers不得要领,恳请各位大神指点!谢谢!

afan 发表于 2019-10-22 09:29:13

anythinging 发表于 2019-10-21 22:21
Local $startcheck = 0
While 1
      ;MsgBox(0,'',$startcheck,1)


注意CPU占用;Sleep(6000)这种过长的休眠也不是好习惯,虽然这里无所谓~
#include <Timers.au3>
Local $nn = 0, $IdleTime
While 1
        Sleep(100)
        $IdleTime = _Timer_GetIdleTime()
        If $IdleTime > 5000 Then
                If $nn = 0 Then
                        MsgBox(0, '', '超过5秒没操作了', 1)
                        $nn = 1
                ElseIf $IdleTime > 10000 Then
                        MsgBox(0, '', '开始关机', 1)
                        ExitLoop
                EndIf
        Else
                $nn = 0
        EndIf
WEnd
;~ Shutdown(1)
MsgBox(0, '', '关机')

229989799 发表于 2019-10-21 20:29:25

我觉得判断$iIdleTime1 + $iIdleTime2 是否大于10秒是不是更好??:face (24):

afan 发表于 2019-10-21 20:42:35

229989799 发表于 2019-10-21 20:29
我觉得判断$iIdleTime1 + $iIdleTime2 是否大于10秒是不是更好??

这个相加是木有意义的~:face (24):
我知道LZ的意思,5秒没操作提示后再5秒没操作就关机,但是5秒没操作提示后操作了就需要重新来过。
提示后加个已提示的标记,之后如果有此标记就不用再次提示,进入关机时间判断

anythinging 发表于 2019-10-21 21:45:48

我想了个办法,能过send一个无关紧要的键可以清空键盘空闲时间,但仍达不到预期
send("{TAB}")
但又有了一个问题,如何在清空键盘时间后继续检测空闲状态

有个很典型的例子,系统的屏保:现在卡在如何屏保运行后,如果动键鼠就退出屏保,如果不动,到达指定时间就体眠计算机。

anythinging 发表于 2019-10-21 22:21:10

本帖最后由 anythinging 于 2019-10-21 22:25 编辑

Local $startcheck = 0
While 1
      ;MsgBox(0,'',$startcheck,1)
      If $startcheck = 1 Then
                Sleep(6000)
                Local $iIdleTime2 = _Timer_GetIdleTime()
                If $iIdleTime2 > 6000 Then
                        MsgBox(0,'','开始关机',1)
                Else
                        $startcheck = 0
                EndIf

      Else
                Local $iIdleTime1 = _Timer_GetIdleTime()
                if $iIdleTime1 >5000 Then
                              $startcheck = 1
                              send("{TAB}");清零空闲时间
                              MsgBox(0,'','超过5秒没操作',1)
                EndIf
      EndIf
WEnd
我的目的达到了,用了版主的标记,加上sleep,还有send,感觉有点业余啊,能否再完美些

anythinging 发表于 2019-10-22 12:19:59

afan 发表于 2019-10-22 09:29
注意CPU占用;Sleep(6000)这种过长的休眠也不是好习惯,虽然这里无所谓~

版主您这代码太简练,高效了,佩服的五体投地!
页: [1]
查看完整版本: 【已解决】关于检测空闲时间运行的问题