Блокировка рабочего стола Windows из Java после истечения времени ожидания

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

Решение

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

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

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

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

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

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

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

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

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

final String path = System.getenv("windir") + File.separator + "System32" + File.separator + "rundll32.exe";
Process pr = rt.exec(path + " user32.dll,LockWorkStation");
Другие вопросы по тегам