我需要在客户计算机上运行Ruby应用程序。通常需要几天时间才能完成(复制大型备份文件)。问题是如果启用睡眠,它将中断应用程序。如果没有,计算机将保持数周,直到我下次访问。有没有办法在执行期间防止睡眠并让Windows睡觉?
欢迎任何疯狂的想法; - )
答案 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平台上做的不多,但以下方法似乎合乎逻辑:
如果您的程序出错,您可能需要添加一些额外的逻辑来重新启用自动暂停。
此外,应用程序可能需要在有权启用/禁用自动暂停的帐户下运行。
希望这有帮助!