java - 如何在 java 中使用 runtime.exec 锁定、关闭、重新启动和挂起 pc?
问题描述
如何在 java 中使用 runtime.exec 锁定、关闭、重新启动和挂起 pc?
我想为windows和linux os制作一个jar。
我想以编程方式锁定、关闭、重新启动和挂起电脑。
我试过这段代码。
package poweroff;
import mousekeyboardcontrol.MouseKeyboardControl;
public class PowerOff {
String os;
Runtime runtime;
public PowerOff() {
os = System.getProperty("os.name");
runtime = Runtime.getRuntime();
}
public void shutdown() {
try {
if ("Windows 8.1".equals(os) || "Windows 8.0".equals(os) || "Windows 10".equals(os)) {
runtime.exec("shutdown -s");
} else {
System.out.println("Unsupported operating system");
}
} catch(Exception e) {
System.out.println("shutdown error");
e.printStackTrace();
}
}
public void restart() {
try {
if ("Windows 8.1".equals(os) || "Windows 8.0".equals(os) || "Windows 10".equals(os)) {
runtime.exec("shutdown -r");
} else {
System.out.println("Unsupported operating system");
}
} catch(Exception e) {
System.out.println("restart error");
e.printStackTrace();
}
}
public void suspend() {
try {
if ("Windows 8.1".equals(os) || "Windows 8.0".equals(os) || "Windows 10".equals(os)) {
runtime.exec("Rundll32.exe powrprof.dll,SetSuspendState Sleep");
} else {
System.out.println("Unsupported operating system");
}
} catch(Exception e) {
System.out.println("suspend error");
e.printStackTrace();
}
}
public void lock() {
try {
if ("Linux".equals(os) || "Mac OS X".equals(os)) {
new MouseKeyboardControl().ctrlAltL();
} else if ("Windows 8.1".equals(os) || "Windows 8.0".equals(os) || "Windows 10".equals(os)) {
runtime.exec("Rundll32.exe user32.dll,LockWorkStation");
} else {
System.out.println("Unsupported operating system");
}
} catch(Exception e) {
System.out.println("pc lock error");
e.printStackTrace();
}
}
public static void main(String args[]) {
PowerOff powerOff = new PowerOff();
powerOff.lock();
}
}
但是,它没有奏效。
我想在 Windows 7、8、10 和所有 linux 操作系统的 java 中以编程方式锁定、关闭、重新启动和挂起。
我该如何解决这个问题?
解决方案
一种解决方案可能是使用带有适当标志的每个操作系统的命令行工具。例如,请参见此处的linux。另请参阅另一个示例的此答案关闭计算机
对于 Windows 关闭尝试:"shutdown -s -t 0"
对于 Windows 重新启动尝试:"shutdown -r -t 0"
对于 Windows 休眠尝试:"shutdown -h -t 0"
对于 Linux 关闭尝试:"shutdown now"
对于 Linux 重新启动尝试:"reboot now"
提示:如果您可以引入依赖项,则使用Apache Commons 的SystemUtils可以帮助以易于阅读/维护的方式正确检查操作系统版本。
推荐阅读
- java - 使用 OneLogin java SAML 身份验证传递和检索属性
- haskell - Haskell 中的算术表达式求值
- java - 正则表达式:匹配前面有偶数反斜杠的字符
- ssas - 如何在 MDX 查询中的行上显示多个维度?
- javascript - 在 forEach 循环中使用 Promise
- r - 如何在R中绘制不同列的数据
- apache-kafka - 所有 kafka 经纪人 100% 的 cpu 使用率
- python - 使用 Python 从 Excel 列标题创建表并加载数据?
- c# - 静态字段初始化程序未在实例构造函数之前运行
- java - Javers 将添加的对象检索到列表中