【问题标题】:Sleep Windows from Java从 Java 休眠 Windows
【发布时间】:2010-11-25 01:02:10
【问题描述】:

在windows上有java命令可以让电脑休眠吗?

【问题讨论】:

  • 删除了 hibernate 标签,因为它引用了 ORM。

标签: java windows sleep standby


【解决方案1】:

一个更复杂的方法,但你可以使用ProcessBuilder 来制作一个shell 脚本(.sh.bat)并执行它。

【讨论】:

    【解决方案2】:

    我目前使用https://github.com/twall/jna 解决了这个问题。来自http://www.pinvoke.net/default.aspx/powrprof.SetSuspendState的电话信息

    import com.sun.jna.Native;
    import com.sun.jna.Platform;
    public class WindowsSuspend {
      public static native boolean SetSuspendState(boolean hibernate, boolean forceCritical, boolean disableWakeEvent);
    
      static {
        if (Platform.isWindows())
          Native.register("powrprof");
      }
    }
    

    调用它而不是使用WindowsSuspend.SetSuspendState(false, false, false)

    【讨论】:

      【解决方案3】:

      任何建议rundll32的人都应该被枪毙,很少有函数被设计为由rundll32调用,而SetSuspendState不是其中之一。您将获得随机行为(休眠与待机和强制与非强制等)请参阅this blog entry for more details

      【讨论】:

      • 为什么讨厌这个答案?似乎周到且乐于助人。至少在你 -1 时发表评论。
      • 好的。因此,RunDLL32 进程在调用该函数后会以损坏的堆栈告终。谁在乎?它不能“感染”父进程,并且在它发生时该函数已经被调用。
      • @Jherico:不,这不是问题,问题是,您将使用 UNKNOWN 参数调用 SetSuspendState,并且由于 SetSuspendState 将根据参数休眠或待机,这有点问题
      • @Jherico:另外,如果您查看您发布的文章,您会注意到他们告诉您在系统范围内禁用/启用休眠以“治愈”未知/随机参数问题
      • 阅读博客条目。不明白。什么是正确的方法?
      【解决方案4】:

      如果您的 java 应用程序有足够的权限,您可以通过执行 shell 命令来执行此操作。命令是……

      Runtime.getRuntime().exec("Rundll32.exe powrprof.dll,SetSuspendState Sleep");
      

      该命令和其他命令显示为here

      【讨论】:

      【解决方案5】:

      您可能需要查看 OnNow/ACPI 支持here

      还有一篇旧的 SO 帖子谈到了它here. 可能与您想要的相反。不过可能会给你一些线索。

      【讨论】:

        【解决方案6】:

        没有。您需要通过Runtime.exec() 执行单独的二进制文件。

        This article 建议

        rundll32 Powrprof.dll,SetSuspendState 
        

        但我没试过。

        【讨论】:

          猜你喜欢
          • 2018-12-21
          • 1970-01-01
          • 2011-11-22
          • 1970-01-01
          • 2011-09-18
          • 2011-02-25
          • 2018-09-10
          • 2013-07-01
          • 2012-12-24
          相关资源
          最近更新 更多