OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

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

  • すぐに回答を!
  • 質問No.143712
  • 閲覧数204
  • ありがとう数0
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 23% (40/169)

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で開発しています。
  
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.3
レベル14

ベストアンサー率 51% (1179/2272)

こんにちは。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
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.1
レベル8

ベストアンサー率 51% (14/27)

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

  • 回答No.2
レベル13

ベストアンサー率 46% (643/1383)

単純解ですが、Shell関数でb.exeを起動後にEnd ステートメントを使ってa.exeを終了させ、 b.exe終了時にShell関数でa.exeを再び起動する、って風にしたらだめなのでしょうか。
単純解ですが、Shell関数でb.exeを起動後にEnd ステートメントを使ってa.exeを終了させ、
b.exe終了時にShell関数でa.exeを再び起動する、って風にしたらだめなのでしょうか。
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このやり方知ってる!同じこと困ったことある。経験を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ