• ベストアンサー

VBについて教えてください。

1.a.exeでShell関数でb.exe起動したときにa.exeはみれなくして   b.exeで終了するとb.exeはなくなりa.exeだけにしたいのですが   どうすればよいのかおしえてください。   a.vbp   RetVal = Shell("c:\b.exe", 1)   ← b.exeの起動 b.vbp end ← 終了   b.exeが起動中はヤククにa.exeがなくなり、b.exeが終了すると   a.exeが起動するようにしたいのです   よろしくお願いします。   WINDOWS98でvb6.0で開発しています。   

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

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

こんにちは。maruru01です。 APIを使ってShell関数で呼び出したプログラムを終了するまで、元のプログラムが待機している関数を自作しました。 a.vbpのForm1にb.exeを呼び出すためのコマンドボタン"cmdOpen"があるとします。 では。 Private Sub cmdOpen_Click()   Dim FullPath As String  'b.exeのフルパス   Form1.Visible = False   FullPath = "c:\b.exe"   WaitShell FullPath   Form1.Visible = True End Sub 以下は標準モジュールに記述 Public Declare Function OpenProcess Lib "kernel32" _     (ByVal dwDesiredAccess As Long, _     ByVal bInheritHandle As Long, _     ByVal dwProcessId As Long) As Long '【機能】  : 既存のプロセスオブジェクトのハンドルを返す '【戻り値】 : (成功)指定したプロセスのオープンハンドル '      (失敗)NULL Public Const PROCESS_QUERY_INFORMATION = &H400& Public Declare Function GetExitCodeProcess Lib "kernel32" _     (ByVal hProcess As Long, _     lpExitCode As Long) As Long '【機能】  : 指定されたプロセスの終了状態を返す '【戻り値】 : (成功)0以外(終了していないときはSTILL_ACTIVEが格納される) '      (失敗)0 Public Const STATUS_PENDING = &H103& Public Const STILL_ACTIVE = STATUS_PENDING Public Declare Function CloseHandle Lib "kernel32" _     (ByVal hObject As Long) As Long '【機能】  : オープンしているオブジェクトハンドルをクローズする '【戻り値】 : (成功)0以外 '      (失敗)0 'アプリケーションを起動し、終了するまで待機する 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

その他の回答 (2)

  • ARC
  • ベストアンサー率46% (643/1383)
回答No.2

単純解ですが、Shell関数でb.exeを起動後にEnd ステートメントを使ってa.exeを終了させ、 b.exe終了時にShell関数でa.exeを再び起動する、って風にしたらだめなのでしょうか。

  • ykymtkt
  • ベストアンサー率51% (14/27)
回答No.1

a.exeは、標準 EXE b.exeは、ActiveX EXE で作成しましょう。

関連するQ&A

専門家に質問してみよう