0

プロセスで waitFor コマンドを使用しているときに問題が発生しました。私のコードはこのようなものです

//preconditions
try{
  // lock the work station
  Process p= Runtime.getRuntime().exec("C:\\Windows\\System32\\rundll32.exe user32.dll,LockWorkStation");
  int exitval=p.waitFor();
  // If the authentication is successful
  if(exitval==0)
  {
     //statements to insert into database 
  }
}
catch(IOException e)
{
   e.printStackTrace();
}
catch (InterruptedException e) {
   e.printStackTrace();
}

プロセスは画面を正常にロックしていますが、ユーザーが終了値「0」で実際に認証できるようになる前に終了しており、プログラムはステートメントをデータベースに挿入しています。ユーザーが正常に認証されるまでプロセスを待機させてから、データをデータベースに挿入します。私は成功せずにかなりグーグルで検索しました。画面をロックするには、別のプロセスを使用する必要がありますか?

4

2 に答える 2

2

内部では、実行時に以下が呼び出されていますLockWorkStation非同期で実行されることに注意してください

BOOL WINAPI LockWorkStation(void);
If the function succeeds, the return value is nonzero. Because the function executes asynchronously, 
a nonzero return value indicates that the operation has been initiated. It does not indicate whether 
the workstation has been successfully locked.

また、上記のコードでは、プロセスを実行する必要があります。

あなたの質問で提示されたもので、次のように変更します。

Process p= Runtime.getRuntime().("C:\\Windows\\System32\\rundll32.exe user32.dll,LockWorkStation");
int exit = p.waitFor();

Process p= Runtime.getRuntime().exec("C:\\Windows\\System32\\rundll32.exe user32.dll,LockWorkStation");
int exit = p.waitFor();

また、ProcessBuilderRuntime.exec() の代わりに使用することを検討することもできます。

于 2013-10-31T12:09:35.610 に答える
0

LockWorkStation非同期関数です。ロック解除を待たずに、常にすぐに戻ります。コンソールから実行すると、画面がロックされる直前にC:\Windows\System32\rundll32.exe user32.dll,LockWorkStation次のコマンド プロンプトが表示されることさえあります。つまり、これは Java や.Process.waitFor()

于 2013-10-31T14:13:54.723 に答える