アプリ版:「スタンプのみでお礼する」機能のリリースについて

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で開発しています。
  

A 回答 (3件)

a.exeは、標準 EXE


b.exeは、ActiveX EXE
で作成しましょう。
    • good
    • 0

単純解ですが、Shell関数でb.exeを起動後にEnd ステートメントを使ってa.exeを終了させ、


b.exe終了時にShell関数でa.exeを再び起動する、って風にしたらだめなのでしょうか。
    • good
    • 0

こんにちは。

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
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!