実行ファイルが終了するまで待機する

解決


きぐま  2003-06-13 02:42:20  No: 107495

実行可能ファイルをVBで作成したEXEからCreateProcess、WaitForSingleObjectを使用して起動させました。

すると、その実行可能ファイル以外の描画が真っ白になってしまいました。
Shellで起動した時のように背景の描画が真っ白にならないようにするにはどうしたらいいでしょうか??


きぐま  2003-06-13 03:48:59  No: 107496

原因はWaitForSingleObjectのようなのですが、、、。


Loreley  2003-06-13 11:22:04  No: 107497

コードがないので予測ですが
WaitForSingleObjectの第二引数が大きすぎませんか?
WaitForSingleObject一回で待とうとしていませんか?
もしそうなら
while文で回してWaitForSingleObjectの戻り値で
while文を抜けるようにするといいです


きぐま  2003-06-13 19:28:59  No: 107498

第二引数はINFINITEです・・・。
これを物凄く小さくしてWhile文で回すという事でしょうか??

うーん。。。わかんないっす。


とろ  2003-06-13 20:58:43  No: 107499

こんな感じでやってみては?

  Dim IDProcess   As Long
  Dim hProcess    As Long
  Dim ExitCode    As Long
  Dim ret         As Long
  IDProcess = Shell("...", ?)
  hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, 1, IDProcess)
  Do
    ret = GetExitCodeProcess(hProcess, ExitCode)
    DoEvents
  Loop While (ExitCode = STILL_ACTIVE)
  ret = CloseHandle(hProcess)


きぐま  2003-06-13 23:59:52  No: 107500

いちおうLoreley さんのやり方で動いてるようです。
ただ、この間呼び出し元のEXEは操作不可にしたいのですが、

WaitForSingleObjectのループに入る前にEnableをFalseにするってので
大丈夫ですかね??

戻ってきたらTrueにするのですが。


きぐま  2003-06-18 19:12:33  No: 107501

XPだと動かないのですが。。。どうしたらいいですか?


たき  2003-06-18 20:51:46  No: 107502

私の環境はXPですけど、
WaitForSingleObjectをINFINITEで呼ぶ方法、
値を小さくしてループする方法、
どちらも正常に動きますけど。

どの部分でどのようなエラーがでて、
動かないのでしょうか。


魔界の仮面弁士  2003-06-19 19:34:39  No: 107503

> CreateProcess、WaitForSingleObjectを使用して起動させました。
> すると、その実行可能ファイル以外の描画が真っ白になってしまいました。

替わりに、WshShellオブジェクトのRunメソッドが使えないでしょうか。

Private Sub Command1_Click()
    Dim S As String
    Dim R As Long

    Me.Enabled = False
    S = "C:\Project1.exe"
    
    MsgBox S & "を起動します。", vbInformation Or vbSystemModal

    R = CreateObject("WScript.Shell").Run(S, vbNormalFocus, True)

    MsgBox "終了しました。戻り値=" & CStr(R), vbInformation Or vbSystemModal

    DoEvents
    Me.Enabled = True
End Sub


Loreley  2003-06-21 11:04:51  No: 107504

うーむ。
ループにDoEventsがないんですかね。
それとも呼び出したアプリケーションに問題があるとか。

描画が真っ白ってことは
再描画されていないということですので、
ループの部分を見たほうがいいかもしれません。

デスクトップの壁紙なども真っ白になるんですか?

ちなみにINFINITEではなくwhileの方が言ったのもそのためです。
INFINITEでは、起動させられたアプリが終了するまで、
起動させたアプリは応答しないと思います。
すると、再描画すら行わないので、真っ白になるというわけです。
とろさんのサンプルのように、
ループの中にDoEventsを渡しておけば
そこで、windowsがいつも自動でやってくれる処理を解決してくれますので。


きぐま  2003-07-03 18:39:41  No: 107505

遅くなりましたが解決しました!
本当にありがとうございます。

XPも正常に動きます。
DoEventsが抜けてました。。。本当にすみません。ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加