Блокировка рабочего стола Windows из Java после истечения времени ожидания - PullRequest
2 голосов
/ 04 октября 2011

Я хочу, чтобы мое приложение 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 ]

5 голосов
/ 15 марта 2012

Попробуйте абсолютное местоположение:

Runtime.getRuntime().exec("C:\\Windows\\System32\\rundll32.exe user32.dll,LockWorkStation");
4 голосов
/ 04 октября 2011

Я думаю, что есть лучший способ проверить это:

1) поместить команду в файл .bat.

2) Запустите файл bat. это работает ?

3) Если это так, вызовите файл .bat в своем коде.

4) Это работает? Если так, то все готово. Я не думаю, что есть какая-то ценность в кодировании специфичного для Windows кода в exec времени выполнения, просто сохраните файл bat как отдельный файл в вашем приложении.

Runtime.exec иногда завершается ошибкой, потому что пути не совпадают внутри JVM, как в собственном OS.

3 голосов
/ 05 октября 2015

Это также работает (проверено на Windows 7 x86):

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