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

これも機能しています (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 に答える
4

これをテストするより良い方法があると思います:

1) コマンドを .bat ファイルに入れます。

2) バットファイルを実行します。それは動作しますか?

3) その場合は、コードで .bat ファイルを呼び出します。

4) それは機能しますか? もしそうなら、あなたは終わりです。Windows固有のコードをランタイムexecにエンコードすることに価値があるとは思いません.batファイルをアプリ内の別のファイルとして保持してください。

JVM 内のパスがネイティブ OS 内と同じではないため、Runtime.exec が失敗することがあります。

于 2011-10-04T03:27:47.913 に答える