Блокировка рабочего стола 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");