fayuOmg 发表于 2022-2-25 12:43:58

利用_Timer_GetIdleTime函数使系统休眠,唤醒后立刻休眠,[已解决]

本帖最后由 fayuOmg 于 2022-2-25 23:52 编辑

#include <Timers.au3>
While 1
      sleep(1000)
      Local$SysIdleTime = _Timer_GetIdleTime()               
      If $SysIdleTime >= 1000*20 Then               
            Shutdown(32)
      EndIf
WEnd利用_Timer_GetIdleTime函数获取系统空闲时间,并用于系统待机的话,用上面的语句在按电源键恢复系统时,由于If $SysIdleTime >= 1000*20为真,所以会立即又执行shutdown命令。

我写的代码比较复杂,上面只是为说明问题而最简化的部分。



我的解决办法是:见二楼
奇怪啊,这里就是加不了代码,只能放二楼了

在达到设定的超时待机前,先设定一个状态值,达到超时值时,翻转这个值。

这样即使_Timer_GetIdleTime的数值仍然满足条件,但不会触发Shutdown

fayuOmg 发表于 2022-2-25 12:47:22

本帖最后由 fayuOmg 于 2022-2-25 23:53 编辑

#include <Timers.au3>
Local $iShutdownIsReady = 0

While 1
        Sleep(1000)
        Local$SysIdleTime = _Timer_GetIdleTime()

                If $SysIdleTime >= 20000 Then      ;达到设定的超时值
                        If $iShutdownIsReady = 1 Then
                                $iShutdownIsReady = 0
                                Shutdown(32)
                        EndIf
                ElseIf $SysIdleTime >= 10000 Then      ;达到超时前设置一下中间状态
                        $iShutdownIsReady = 1
                Else
                        $iShutdownIsReady = 0
                EndIf
WEnd

afan 发表于 2022-2-25 13:05:33

进入待机前显示倒计时msgbox

fayuOmg 发表于 2022-2-25 13:59:48

afan 发表于 2022-2-25 13:05
进入待机前显示倒计时msgbox

大部分电脑在下班后都处于屏保状态,锁屏状态下msgbox的倒计时是无效的

afan 发表于 2022-2-25 18:12:51

你如果要一直循环,在 Shutdown(32) 下面加两行试试
Sleep(10 * 1000)
MouseMove(500, 500)
不循环就加一行 Exit()

haijie1223 发表于 2022-2-25 20:15:25

afan 发表于 2022-2-25 18:12
你如果要一直循环,在 Shutdown(32) 下面加两行试试
Sleep(10 * 1000)
MouseMove(500, 500)


愣是没看懂题意

fayuOmg 发表于 2022-2-25 20:38:22

haijie1223 发表于 2022-2-25 20:15
愣是没看懂题意

老大好,是我题目没说明白。

比如说设定空闲超过20秒后待机,待机后,按电源键恢复系统,在此期间要是没有操作键鼠,那么_Timer_GetIdleTime返回的值就没有被置零,还是超过20秒的那个数值,满足 If $SysIdleTime >= 1000*20 ,就立即又待机了。

问题已经解决,在临近设定的时间前,设置一个状态值,超时后把它翻转就可以了。

fayuOmg 发表于 2022-2-25 23:45:46

afan 发表于 2022-2-25 18:12
你如果要一直循环,在 Shutdown(32) 下面加两行试试
Sleep(10 * 1000)
MouseMove(500, 500)


a版,问题已解决,请关贴
页: [1]
查看完整版本: 利用_Timer_GetIdleTime函数使系统休眠,唤醒后立刻休眠,[已解决]