開発環境はVB5.0(SP3)で、実行環境はWindows XP
CreateProcessLongでプロセスハンドルを取得し、WaitForSingleObjectで起動先プロセスが終了するまで待機(INFINITE)しているのですが起動元プロセスの画面をクリックすると”応答なし”となります。
待機するプログラムはGetExitCodeProcessで待機できるのですが
起動元プロセスの画面をクリックすると起動先プロセスの画面が裏に隠れてしまいます。起動元と起動先の親子関係を崩さずプログラムを待機したいのですが、どなたか教えていただけないでしょうか
待ち時間を無限にしないで、適度にソフトに処理を戻してあげます。
そこでDoEventsを使ってあげればいいです。
(待ち時間を無限に設定してよいのは、定例処理しかしないコンソールアプリケーションなどのみと思ったほうがよさそうです)
後者の質問のほうは、よくわかりません。他の詳しい人に譲ります(^^ゞ
WshShell.Runメソッドを利用してみるとか。
Private Sub Command1_Click()
MsgBox "電卓を起動します。", vbSystemModal Or vbInformation
CreateObject("WScript.Shell").Run "CALC.EXE", vbNormalFocus, True
MsgBox "電卓が終了しました。", vbSystemModal Or vbInformation
End Sub
WshShell.Runメソッドを利用してみましたが、電卓画面(CALC.EXE)が起動元exeの裏に隠れてしまいます。(起動元exeをクリックしたら)
起動元exeが終了するまで他ウィンドウの切り替えを行いたくありません。(モーダル状態)
どなたかご教授願います。
そもそも親子関係なんて無いですからねえ。。。
起動先のEXEが常に前にある状態にしたいというのなら、
SetWindowPos 関数で起動先のEXEを常に手前に表示させる。
起動先EXEが終了するまで、起動元EXEが反応してほしくないだけであれば
その間、起動元EXEをHideさせるとか。
ツイート | ![]() |