找回密码
 加入
搜索
查看: 1697|回复: 6

[网络通信] 【已解决】关于检测空闲时间运行的问题

[复制链接]
发表于 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不得要领,恳请各位大神指点!谢谢!
发表于 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, '', '关机')

评分

参与人数 1金钱 +30 收起 理由
anythinging + 30

查看全部评分

发表于 2019-10-21 20:29:25 | 显示全部楼层
我觉得判断$iIdleTime1 + $iIdleTime2 是否大于10秒是不是更好??
发表于 2019-10-21 20:42:35 | 显示全部楼层
229989799 发表于 2019-10-21 20:29
我觉得判断$iIdleTime1 + $iIdleTime2 是否大于10秒是不是更好??

这个相加是木有意义的~  
我知道LZ的意思,5秒没操作提示后再5秒没操作就关机,但是5秒没操作提示后操作了就需要重新来过。
提示后加个已提示的标记,之后如果有此标记就不用再次提示,进入关机时间判断
 楼主| 发表于 2019-10-21 21:45:48 | 显示全部楼层
我想了个办法,能过send一个无关紧要的键可以清空键盘空闲时间,但仍达不到预期
send("{TAB}")
但又有了一个问题,如何在清空键盘时间后继续检测空闲状态

有个很典型的例子,系统的屏保:现在卡在如何屏保运行后,如果动键鼠就退出屏保,如果不动,到达指定时间就体眠计算机。
 楼主| 发表于 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,感觉有点业余啊,能否再完美些
 楼主| 发表于 2019-10-22 12:19:59 | 显示全部楼层
afan 发表于 2019-10-22 09:29
注意CPU占用;Sleep(6000)这种过长的休眠也不是好习惯,虽然这里无所谓~

版主您这代码太简练,高效了,佩服的五体投地!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-23 16:57 , Processed in 0.071826 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表