• 締切済み

karnell32エラー(訂正:EXE間でデータを受け渡し時の~) 2

Public Function gfExecChildProcessAndWait(ByRef frmForm As Form, ByVal strExeFileName As String, _ ByVal blnFlgParentFormUnload As Boolean) As Boolean Dim lngProcessId As Long Dim lngProcessHandle As Long Dim lngWin32apiResultCode As Long Dim lngProcessExitCode As Long On Error GoTo SysErr_gfExecChildProcessAndWait: gfExecChildProcessAndWait = True lngProcessExitCode = 0 ' 実行可能ファイルを起動(コマンドライン引数付き) lngProcessId = Shell(strExeFileName, vbNormalFocus) ' プロセスオブジェクトのハンドルを取得 lngProcessHandle = OpenProcess(PROCESS_QUERY_INFORMATION, False, lngProcessId) ' 新しいプロセスを作成できた場合は If lngProcessHandle <> 0 Then '呼び出し元のフォームをアンロード(あるいはHide) If (blnFlgParentFormUnload = True) Then Unload frmForm Else frmForm.Hide End If ' ポーリング Do ' プロセスの終了状態を取得し、モジュールレベル変数に格納 lngWin32apiResultCode = GetExitCodeProcess(lngProcessHandle, lngProcessExitCode) ' オペレーティングシステムに制御を渡す DoEvents Loop While lngProcessExitCode = STILL_ACTIVE ' プロセスが終了していない間ループ Else Call gsLogWrite("gfExecChildProcessAndWait", "プロセスハンドルの取得に失敗しました。") gfExecChildProcessAndWait = False End If ' プロセスオブジェクトのハンドルをクローズ lngWin32apiResultCode = CloseHandle(lngProcessHandle) Exit Function SysErr_gfExecChildProcessAndWait: gfExecChildProcessAndWait = False Exit Function End Function

みんなの回答

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

これで私は出来ました。(VB6.0) 試してみて下さい。 では。 (標準モジュール) '関数の宣言 Public Declare Function OpenProcess Lib "kernel32" _ (ByVal dwDesiredAccess As Long, _ ByVal bInheritHandle As Long, _ ByVal dwProcessId As Long) As Long Public Const PROCESS_QUERY_INFORMATION = &H400& Public Declare Function GetExitCodeProcess Lib "kernel32" _ (ByVal hProcess As Long, _ lpExitCode As Long) As Long Public Const STATUS_PENDING = &H103& Public Const STILL_ACTIVE = STATUS_PENDING Public Declare Function CloseHandle Lib "kernel32" _ (ByVal hObject As Long) As Long 'アプリケーションを起動し、終了するまで待機する関数 Public Sub WaitShell(AppPath As String, Optional SizeFocusmode As Integer = vbNormalFocus) Dim AppID As Long 'Shell関数の戻り値 Dim Process As Long 'OpenProcess関数の戻り値 Dim ExitCode As Long '終了コード Dim rc As Long AppID = Shell(AppPath, SizeFocusmode) Process = OpenProcess(PROCESS_QUERY_INFORMATION, 1, AppID) 'プロセスが終了していない間はDoEvents関数でOSに制御を戻す Do rc = GetExitCodeProcess(Process, ExitCode) DoEvents Loop While ExitCode = STILL_ACTIVE rc = CloseHandle(Process) End Sub (フォームモジュール) 前部略 Dim koAppPath As String '子EXEファイルのフルパス 中略 oyaForm.Enabled = False    '親フォーム使用不可 WaitShell koAppPath oyaForm.Enabled = True     '親フォーム使用可 後部略

関連するQ&A

専門家に質問してみよう