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

Dic*_*olt 5 ruby sleep windows-7

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

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

Nak*_*lon 6

以下是使用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)
Run Code Online (Sandbox Code Playgroud)


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

  • 为了让你疯狂的想法在键盘上放一些东西,你可以在模拟手表上设置一个带有激光的光学鼠标:)这样你就不必担心键盘的随机输入了 (2认同)

Bri*_*ian 0

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

  1. 在您的程序中,使用适用于 Windows 平台的任何 ruby​​ 库来检查是否启用了自动挂起/睡眠。
  2. 如果启用,请将其禁用。
  3. 运行你的长期任务。
  4. 完成后,重新启用自动挂起/睡眠

如果您的程序出错,您可能需要添加一些额外的逻辑来重新启用自动挂起。

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

希望这可以帮助!