2

是否有命令可以在 java 的 Windows 上使用以使计算机进入睡眠状态?

4

6 回答 6

9

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

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

此处显示了该命令和其他命令。

于 2009-09-02T17:48:22.827 回答
6

任何建议 rundll32 的人都应该被枪杀,很少有函数被设计为由 rundll32 调用,而 SetSuspendState不是其中之一。您将获得随机行为(休眠与待机和强制与非强制等)有关更多详细信息,请参阅此博客条目

于 2009-09-02T20:05:28.337 回答
6

我目前使用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");
  }
}

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

于 2013-02-12T18:46:30.980 回答
0

不,您需要通过Runtime.exec().

这篇文章建议

rundll32 Powrprof.dll,SetSuspendState 

但我还没有尝试过。

于 2009-09-02T17:46:25.310 回答
0

您可能想在此处查看 OnNow/ACPI 支持。

还有一个旧的 SO 帖子在这里讨论它。 可能与您想要的相反。不过可能会给你一些线索。

于 2009-09-02T17:47:08.770 回答
0

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

于 2020-08-04T20:57:02.553 回答