2009-09-02 3 views
1

Есть ли команда для использования на окнах из java, чтобы заставить компьютер спать?Сон Windows с Java

+0

Удален тег спящего режима, поскольку он относится к ORM. –

ответ

8

Вы можете сделать это, выполнив команду оболочки, если у вашего приложения Java достаточно прав для этого. Команда ...

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

То, что и другие команды будут показаны here.

+1

, хотя OP принял это как ответ, будущие читатели также должны посмотреть http://stackoverflow.com/questions/1369122/sleep-windows-from-java/1369832#1369832. –

0

Нет. Вам нужно будет выполнить отдельный двоичный код через Runtime.exec().

This article предлагает

rundll32 Powrprof.dll,SetSuspendState 

, но я не пробовал.

0

Возможно, вы захотите посмотреть поддержку OnNow/ACPI here.

Существует также старая должность, которая говорит об этом here. Возможно, наоборот, что вы хотите. Могли бы дать вам некоторые подсказки.

4

Любой, предлагающий rundll32, должен быть застрелен, очень мало функций, предназначенных для вызова rundll32, а SetSuspendState - , а не один из них. Вы получите случайное поведение (Hibernate vs Standby and Forced vs not force и т. Д.) См. this blog entry for more details.

+1

почему ненависть к этому ответу? кажется задумчивым и полезным. По крайней мере, комментарий, когда вы -1. –

+1

после прочтения записи в блоге, +1 от меня. –

+0

ОК. Таким образом, процесс RunDLL32 заканчивается поврежденным стеком после вызова функции. Какая разница? Он не может «заразить» родительский процесс, и к моменту его появления функция уже вызвана. – Jherico

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).