2015-07-02 165 views
4

从C#程序我想打电话给Windows命令提示符,让系统进入睡眠状态,几秒后我应该唤醒系统。我成功地让系统进入睡眠状态,但几秒钟后我无法将其唤醒。我试图让它睡觉并唤醒的命令是“powrprof.dll,SetSuspendState 0,1,0 & & timeout 10 & & echo”Hello World“”“。命令唤醒睡眠命令后的Windows系统

链接http://www.groovypost.com/howto/schedule-wake-sleep-windows-automatically/说echo会唤醒系统,但它不工作。

+0

您的命令将永远不会工作,因为睡眠和唤醒需要分开的任务。如果你阅读了与你相关联的关系,你会看到两个不同的**计划任务**,一个睡觉,另一个醒来。 – DavidPostill

+0

有没有办法让电脑进入睡眠状态,然后唤醒它? – Bond

+1

不是在同一**命令中。一旦它睡着了,唤醒它的唯一方法就是从计划任务开始。链接**解释了这一点**“没有真正的命令行命令来唤醒您的计算机,因为如果您有能力运行命令,那么您的计算机显然已经清醒了。” – DavidPostill

回答

0

可以使用win32 CreateWaitableTimer API。

  • 当调用系统睡眠时,创建WaitableTimer的过程必须处于活动状态。
  • 示例使用pywin32 api。
  • 允许定时器在Windows电源配置中将系统从睡眠中唤醒。
 

    from win32event import CreateWaitableTimer 
    from win32event import SetWaitableTimer 
    from win32event import WaitForSingleObject 
    import sys 

    def main(minutes): 
     minutes = int(minutes) 
     handle = CreateWaitableTimer(None, True, 'Wake up') 
     dt = -10000000 * minutes * 60 # Convert to seconds. 
     SetWaitableTimer(handle, dt, 0, None, None, True) 
     rc = WaitForSingleObject(handle, 1000 * (minutes + 1) * 60) # 11 s. 
     print ("Done") 

    if __name__ == '__main__': 
     minutes = sys.argv[1] 
     main(minutes) 
 

对于从控制台运行上面的脚本调用wakeupWindows.py像:

python wakeupWindows.py 2 

从现在设定的唤醒定时器2分钟。 脚本将等待2 + 1 = 3分钟。 从另一个控制台让系统进入了梦乡使用:

shutdown /h 

2分钟后,系统会从睡眠中醒来。

使用C#可以实现类似的实现,或者可以使用pyinstaller将此脚本转换为exe,如解释here所述。