1

さまざまな User32.dll ライブラリ呼び出しを使用して、開いているアプリケーション ウィンドウをランダムにクリックする自動テスト用のプログラムをコーディングしています。私の現在の問題は、クリックでダイアログが開く場合、 Process.WaitForInputIdle() を使用しても、ループの次のトリップでそのダイアログが検出されるまで十分に待機しません。つまり、いくつかのクリックがキューされ、それらのクリックが発生した場合回避したいダイアログ内の何か(終了ボタンなど)にあることを事前に伝える方法はありません。私の質問はこれです。プロセスまたはスレッドがすべての処理を終了し、メッセージ ループでのみ待機するのを待つ方法はありますか?

それが理にかなっていることを願っています。

乾杯

ロス

編集

これに失敗すると、ターゲットプログラムと私のプログラムのプロセス/スレッドを両方とも同じプロセッサを使用するように設定し、ターゲットプログラムが優先されるようにそれぞれの優先順位を調整することは何とか可能でしょうか?

4

2 に答える 2

1

残念ながら、WaitForInputIdle は、入力メッセージが待機していない状態でアプリがメッセージ ループに入るとすぐに戻ります。

ダイアログのコードを所有している場合は、ダイアログの WM_INITDIALOG で SetEvent を呼び出して、テストの準備ができたことをオートメーションに知らせることができます。または、プロセスで SetWinEventHook を使用して、ダイアログが実際に作成されるのを待ってから入力イベントを送信することもできます。

于 2009-04-17T00:06:38.900 に答える