2

私がやっていることは、shellexecute コマンドを使用してバッチ ファイルを実行することです。現在、進行状況バーまたは単に「進行中」のステータスを表示し、ダイアログの他のすべてのコントロールを無効にする必要があります。MFC でそれを実現するにはどうすればよいでしょうか。

現在私がしているのは、WaitForSingleObject(ShExecInfo.hProcess,INFINITE); を使用することです。バッチファイルが終了するまで、アプリケーションが(実際には)ハングしていると表示されます。

4

2 に答える 2

1

バッチ ファイルの実行を管理し、準備ができたらメイン (GUI) スレッドにメッセージをポストするワーカー スレッドを作成する必要があります。

于 2013-03-26T11:24:04.600 に答える
0
  • ユーザーがアクションを開始するとすぐに、すべてのコントロールを無効にします (必要なすべてのコントロール)。そして、スレッドを立ち上げます。
  • スレッドはShellExecute[ Ex] またはを呼び出しますCreateProcess。プロセスのハンドルを保持し、時間をかけて呼び出しWaitForSingleObjectますINFINITE
  • WFSO が戻ったらすぐに、プロセスが終了したことをウィンドウ (ダイアログ、フォームなど) に通知します。
  • -

ウィンドウに完了を通知するには、カスタム メッセージ コードを定義する必要がある場合があります。

#define WM_PROCESS_FINISHED (WM_APP + 10)

WM_PROCESS_FINISHEDメッセージ ループまたはメッセージ マップのエントリを書き込みます。

スレッドから、ターゲット ウィンドウのハンドルと次のメッセージ コードを指定してPostMessage(または) を呼び出すだけです。SendMessage

PostMessage(hTargetWnd, WM_PROCESS_FINISHED); 
于 2013-03-27T05:55:06.750 に答える