• ベストアンサー

CreateProcess関数と実行後の戻り値について

VB6からCで作られたEXEを実行した戻り値を取得したいのですが どのように記述すればよいのでしょうか? 制御が戻るまで固まらずに待ち続けるには CreateProcessを使うと良いとは思いますが、 notepadなど一方的に動作させて終了するようなサンプルしかなく、 戻り値を取得するサンプルは見当たりませんでした。 戻り値といってもCのEXEは結果を標準出力で表示されるものですが・・・ 何か良いサンプルはあるでしょうか? CreateProcessを使わない方法でも構いません。 r = CreateProcess( _ cmd, _ param, _ ByVal 0&, _ ByVal 0&, _ 0, _ NORMAL_PRIORITY_CLASS, _ ByVal 0&, _ vbNullString, _ si, _ pi _ )

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

>制御が戻るまで固まらずに待ち続けるには プログラムが、イベントを処理してくれないとすると、タイマを使って 監視するしかないような気がします。 Dim ProcessHandle As Long 'プロセスハンドル(共通変数) Dim TerminateCode As Long '終了コード(共通変数) Private Sub Timer1_Timer() If WaitForSingleObject(ProcessHandle, 0) = 0 Then   GetExitCodeProcess ProcessHandle, TerminateCode   Timer1.Interval = 0 End If End Sub http://msdn.microsoft.com/ja-jp/library/cc429427.aspx http://msdn.microsoft.com/ja-jp/library/cc429117.aspx

その他の回答 (1)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

cmd.exeなどのShellから起動してリダイレクトでファイルに出力したほうがいいかもしれません WSH経由で起動させれば プログラムの停止まで実行を待たせることも可能です 『Windows Scripting host Object Model』の参照設定を施し dim wsh as New WshShell wsh.run "cmd /c プログラムパス > 出力ファイル名", 5, 1 Open "出力ファイル名" for input as #1 ' ファイルの入力処理 Close といった具合で ・・・ 参照設定を行わないのであれば dim wsh as Object Set esh = Createobject("WScript.Shell") といった具合です