在Ruby程序执行时阻止Windows 7 PC进入休眠状态

时间:2010-11-08 17:05:41

标签: ruby windows-7 sleep

我需要在客户计算机上运行Ruby应用程序。通常需要几天时间才能完成(复制大型备份文件)。问题是如果启用睡眠,它将中断应用程序。如果没有,计算机将保持数周,直到我下次访问。有没有办法在执行期间防止睡眠并让Windows睡觉?

欢迎任何疯狂的想法; - )

3 个答案:

答案 0 :(得分:6)

Here是使用SetThreadExecutionState WinAPI函数的建议,使应用程序能够通知系统它正在使用中,从而阻止系统进入睡眠状态或关闭显示应用程序运行时。
类似的东西:

require 'Win32API'
ES_AWAYMODE_REQUIRED = 0x00000040
ES_CONTINUOUS = 0x80000000
ES_DISPLAY_REQUIRED = 0x00000002
ES_SYSTEM_REQUIRED = 0x00000001
ES_USER_PRESENT = 0x00000004
func = Win32API.new 'kernel32','SetThreadExecutionState','L'

func.call(ES_CONTINUOUS|ES_SYSTEM_REQUIRED)
# doing your stuff...
func.call(ES_CONTINUOUS)


或者只是在键盘上放一些东西(你说欢迎疯狂的想法

答案 1 :(得分:2)

如果这是一个命令行程序,那么你可以使用像这样的反引号将命令从Ruby发送到命令行

puts `command here`

然后您可以通过发送此命令将计算机设置为不睡眠

c:\windows\system32\powercfg.exe -change -standby-timeout-ac 0

像这样

puts `c:\\windows\\system32\\powercfg.exe -change -standby-timeout-ac 0`

你必须用双倍逃避\。虽然在笔记本电脑上测试并为我工作。我认为它在桌面上的功能相同。

最后的数字是计算机进入睡眠状态之前的分钟数。我不知道您是否可以检索原始值,但您可以将其设置为任何数字。因此,要在10分钟后让计算机进入睡眠状态,您需要发送

puts `c:\\windows\\system32\\powercfg.exe -change -standby-timeout-ac 10`

因此,您可以在脚本开头关闭睡眠状态,然后再打开睡眠状态。

希望这适合你!

答案 2 :(得分:0)

我在Windows平台上做的不多,但以下方法似乎合乎逻辑:

  1. 在您的程序中,使用可用于Windows平台的任何ruby库来检查是否启用了自动挂起/睡眠。
  2. 如果启用,请将其禁用。
  3. 完成漫长的任务。
  4. 完成后,重新启用自动暂停/暂停
  5. 如果您的程序出错,您可能需要添加一些额外的逻辑来重新启用自动暂停。

    此外,应用程序可能需要在有权启用/禁用自动暂停的帐户下运行。

    希望这有帮助!