3

我希望我的 java 应用程序在特定超时后锁定 Windows 桌面。我有一个工作正常的计时器,但我似乎无法执行锁定工作站的命令。

javax.swing.Timer tim = new javax.swing.Timer(1000, new ActionListener() {
   public void actionPerformed(ActionEvent e) {
   System.out.println("CARD NOT PRESENT!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
   // LOCK SCREEN
   Runtime rt = Runtime.getRuntime();
   Process pr = rt.exec("%windir%/System32/rundll32.exe user32.dll,LockWorkStation");
   }
});

这有什么错误吗?或者也许有更简单的方法来做到这一点?

4

3 回答 3

5

尝试绝对位置:

Runtime.getRuntime().exec("C:\\Windows\\System32\\rundll32.exe user32.dll,LockWorkStation");
于 2012-03-15T15:28:48.060 回答
4

我认为有更好的方法来测试这个:

1) 将命令放入 .bat 文件中。

2)运行bat文件。行得通吗?

3) 如果是这样,请在您的代码中调用 .bat 文件。

4)它有效吗?如果是这样,那么你就完成了。我认为将特定于 Windows 的代码编码到运行时 exec 中没有任何价值,只需将 bat 文件作为单独的文件保存在您的应用程序中即可。

Runtime.exec 有时会失败,因为 JVM 中的路径与本机操作系统中的路径不同。

于 2011-10-04T03:27:47.913 回答
4

这也有效(在 Windows 7 x86 上测试):

final String path = System.getenv("windir") + File.separator + "System32" + File.separator + "rundll32.exe";
Process pr = rt.exec(path + " user32.dll,LockWorkStation");
于 2015-10-05T12:49:13.597 回答