アプリを終了するまで待機


アジャジャ  2003-10-07 16:16:09  No: 109006  IP: [192.*.*.*]

開発環境はVB5.0(SP3)で、実行環境はWindows XP
  CreateProcessLongでプロセスハンドルを取得し、WaitForSingleObjectで起動先プロセスが終了するまで待機(INFINITE)しているのですが起動元プロセスの画面をクリックすると”応答なし”となります。
  待機するプログラムはGetExitCodeProcessで待機できるのですが
起動元プロセスの画面をクリックすると起動先プロセスの画面が裏に隠れてしまいます。起動元と起動先の親子関係を崩さずプログラムを待機したいのですが、どなたか教えていただけないでしょうか

編集 削除
たかみちえ  URL  2003-10-07 18:04:35  No: 109007  IP: [192.*.*.*]

待ち時間を無限にしないで、適度にソフトに処理を戻してあげます。
そこでDoEventsを使ってあげればいいです。
(待ち時間を無限に設定してよいのは、定例処理しかしないコンソールアプリケーションなどのみと思ったほうがよさそうです)

  後者の質問のほうは、よくわかりません。他の詳しい人に譲ります(^^ゞ

編集 削除
魔界の仮面弁士  2003-10-08 01:52:16  No: 109008  IP: [192.*.*.*]

WshShell.Runメソッドを利用してみるとか。

Private Sub Command1_Click()
    MsgBox "電卓を起動します。", vbSystemModal Or vbInformation
    CreateObject("WScript.Shell").Run "CALC.EXE", vbNormalFocus, True
    MsgBox "電卓が終了しました。", vbSystemModal Or vbInformation
End Sub

編集 削除
アジャジャ  2003-10-08 09:45:16  No: 109009  IP: [192.*.*.*]

WshShell.Runメソッドを利用してみましたが、電卓画面(CALC.EXE)が起動元exeの裏に隠れてしまいます。(起動元exeをクリックしたら)
  起動元exeが終了するまで他ウィンドウの切り替えを行いたくありません。(モーダル状態)

どなたかご教授願います。

編集 削除
minami  2003-10-14 18:16:14  No: 109010  IP: [192.*.*.*]

そもそも親子関係なんて無いですからねえ。。。
起動先のEXEが常に前にある状態にしたいというのなら、
SetWindowPos  関数で起動先のEXEを常に手前に表示させる。

起動先EXEが終了するまで、起動元EXEが反応してほしくないだけであれば
その間、起動元EXEをHideさせるとか。

編集 削除