超时后从Java锁定Windows桌面

时间:2011-10-04 03:12:03

标签: java windows timeout lockout

我希望我的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");
   }
});

这有什么错误吗?或者可能是一种更简单的方法吗?

3 个答案:

答案 0 :(得分:5)

尝试绝对位置:

Runtime.getRuntime().exec("C:\\Windows\\System32\\rundll32.exe user32.dll,LockWorkStation");

答案 1 :(得分:4)

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

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

2)运行bat文件。它有用吗?

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

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

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

答案 2 :(得分:3)

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

final String path = System.getenv("windir") + File.separator + "System32" + File.separator + "rundll32.exe";
Process pr = rt.exec(path + " user32.dll,LockWorkStation");