• ベストアンサー

使用しているEXEファイルから、別のEXEファイルをクローズする方法

今現在簡単なプログラムを作成しておりまして、 TEST1.exeとTEST2.exeの二つのプログラムがあります。 TEST1.exeとTEST2.exeの二つのアプリケーションを起動 し、TEST1.exeが終了したら、TEST2.exeのアプリケー ションも自動的に終了するようにしたいのですけど、何か やり方ってありますでしょうか? 作成しているソフトはVB6.0/Win2000Proです。 よろしくお願いします。

  • mk100
  • お礼率81% (35/43)

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

  • ベストアンサー
  • ginyou
  • ベストアンサー率32% (138/431)
回答No.1

 CreateProcessプロセスというAPIで起動し  TerminateProcessプロセスというAPIで終了させます  以下に例を上げておきます。 'CreateProcess '新しいプロセスを作り、実行ファイルを実行する。 ' 'BOOL CreateProcess( LPCTSTR lpApplicationName, ' // pointer to name of executable module ' ' LPTSTR lpCommandLine, ' // pointer to command line string ' ' LPSECURITY_ATTRIBUTES lpProcessAttributes, ' // pointer to process security attributes ' ' LPSECURITY_ATTRIBUTES lpThreadAttributes, ' // pointer to thread security attributes ' ' BOOL bInheritHandles, ' // handle inheritance flag ' ' DWORD dwCreationFlags, ' // creation flags ' ' LPVOID lpEnvironment, ' // pointer to new environment block ' ' LPCTSTR lpCurrentDirectory, ' // pointer to current directory name ' ' LPSTARTUPINFO lpStartupInfo, ' // pointer to STARTUPINFO ' ' LPPROCESS_INFORMATION lpProcessInformation ' // pointer to PROCESS_INFORMATION ' ' ); ' Private Type PROCESS_INFORMATION hProcess As Long hThread As Long dwProcessId As Long dwThreadId As Long End Type Private Type STARTUPINFO cb As Long lpReserved As String lpDesktop As String lpTitle As String dwX As Long dwY As Long dwXSize As Long dwYSize As Long dwXCountChars As Long dwYCountChars As Long dwFillAttribute As Long dwFlags As Long wShowWindow As Integer cbReserved2 As Integer lpReserved2 As Long hStdInput As Long hStdOutput As Long hStdError As Long End Type Private Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String, ByVal _ lpCommandLine As String, lpProcessAttributes As Any, lpThreadAttributes As Any, ByVal bInheritHandles As Long, _ ByVal dwCreationFlags As Long, lpEnvironment As Any, ByVal lpCurrentDriectory As String, lpStartupInfo As STARTUPINFO, _ lpProcessInformation As PROCESS_INFORMATION) As Long Private Declare Function OpenProcess Lib "kernel32.dll" (ByVal dwAccess As Long, ByVal fInherit As Integer, ByVal hObject _ As Long) As Long Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Const SYNCHRONIZE = 1048576 Const NORMAL_PRIORITY_CLASS = &H20& Dim pInfo As PROCESS_INFORMATION Dim sInfo As STARTUPINFO Dim sNull As String Private Sub Command1_Click() Dim success& success& = CreateProcess(sNull, "Calc.exe", ByVal 0&, ByVal 0&, 1&, NORMAL_PRIORITY_CLASS, ByVal 0&, sNull, sInfo, pInfo) End Sub Private Sub Command2_Click() Dim ret& ret& = TerminateProcess(pInfo.hProcess, 0&) ret& = CloseHandle(pInfo.hThread) ret& = CloseHandle(pInfo.hProcess) End Sub

mk100
質問者

お礼

参考となるソースを書いていただきましてありがとうございます。 大変参考になります。

その他の回答 (2)

  • 2ch
  • ベストアンサー率51% (64/125)
回答No.3

掲示板に質問する前に、過去スレを調べるべし

参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=558701
mk100
質問者

お礼

わざわざどうもありがとうございます。 そして、参考URLどうもありがとうございました。 ちなみに、私もアホじゃないんで、調べた上で質問はし ております。 ただ私が行った検索方法では、ヒットしなかっただけの 話です。 似たような質問が繰り返され、気分を害されたのかもし れませんが、私も調べもせずに質問したわけではないので、その辺はご理解いただけたらな。。。と思います。

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.2

APIを使わないと無理です。 TerminateProcessというAPIを使えば可能です。 ただ本当に強制終了なので、お勧めはできません。 プログラム次第ではメモリリークが発生します。 PostMessageでそのハンドルに対してWM_CLOSEを 送ればいいのですが、 ハンドル取得が厄介なのでその辺りは調べてください。

参考URL:
http://www.vector.co.jp/soft/winnt/util/se282818.html
mk100
質問者

お礼

どうもありがとうございます。 実行しているEXEから、他のEXEを終了させるのは、少々 手荒な操作なんですね。 大変勉強になります。

関連するQ&A

  • すぐにexeファイルが終了しない。

    VB5(SP3)でアプリケーション(exeファイル)を作成したのですが、 終了させても、数秒間アプリケーションが作動しているようなのです。 (「Ctrl」+「Alt」+「Delete」で「アプリケーションの強制終了」を表示させて確認しています) Win98でこの現象が発生し、Win95だとすぐに終了してくれます。 (どちらとも、同じスペックのPCです) ちなみに、終了させているプログラムの中身は下記のとおりです。 Private Sub 終了_Click()   (処理)   Unload Me   End End Sub すぐに終了させたいのですが、お手上げ状態です。 ご指導のほど、宜しくお願い致します。

  • EXEを呼び出す方法

    VBのプログラムの中からEXEを実行する方法が分かりません。 例えば 既に作成済みのTest.exeがあります で新しいシステムにTest.exeを組み込みたいのです。 ボタンを押したらTest.exeが実行される方法を教えてください。

  • VS2008で二つのexeファイルを作成する方法

    アプリケーションとそのアプリケーションの設定を行うための画面を 別々のexeファイルから起動させるようにしたいのですが VS2008において一つのソリューションで二つのexeファイルを作成する方法はあるでしょうか? 例えばtestというアプリケーションについて、その実行ファイルがtest.exeの場合 testアプリケーションの設定画面はtest_config.exeという別の実行ファイルを起動して 画面を立ち上げたいと考えています。 通常、一つのソリューションには一つのexeファイルしか作成できないと思うのですが可能でしょうか? それともやはりソリューションを二つ作らなければなりませんか?

  • 別プログラムの終了監視

    VisualBasic6.0で別プログラムの終了を監視することはできませんか? 具体的に言うと、ACCESS2000で作ったアプリケーションからVB6.0で作ったEXEを起動させてそのEXEから起動元のACCESSアプリケーションの終了を監視するというものです。 いろいろやってはいるのですがうまくいきません。 誰か教えてください!

  • VBからExcelクローズ検知

    VBで作成したaaa.exeの中でエクセルファイルbbb.xls、ccc.xlsを呼び出しています。 taskIdB = Shell("C:\Program Files\Microsoft Office\Office10\excel.exe C:\bbb.xls", vbHide) taskIdC = Shell("C:\Program Files\Microsoft Office\Office10\excel.exe C:\ccc.xls", vbHide) bbb.xls、ccc.xlsともにWorkbook_Openイベントで自動的にVBAが起動し、処理が終了すると自分自身を クローズするようになっています。 ここで問題になるのが、ccc.xls は bbb.xlsの処理完了を待ってから起動したいのですが、連続的に起動してしまう点です。 aaa.exeのなかで、bbb.xlsの終了を検知するなど、良い解決方法があればお教え下さい。 WindowsはXp pro.、VBは6.0、Excelは2002を使用しています。 よろしくお願いいたします。

  • exeファイルへパスワードを付加する方法

    VBで作成したプログラムにて、自己解凍のexeファイルを作成しているのですが、セキュリティのためファイルにパスワードをかけたいと考えております。 VBからexeファイルにパスワードをかける方法orDLLはありますでしょうか? よろしくお願いいたします。

  • exeファイルから自動起動CDロムを作成したいです

    最近自分なりに作成したごく簡単なアプリケーションソフトができたのですが、 それをとりあえず、自動起動CDロム一枚に作成して知人に渡したいと思っています。 やはり自動起動したほうがそれらしいので、 なんとかして自動起動させたく思っています。 ファイルはexeファイルです。 また、使用ライティングソフトはB's Recordarです。 よろしくお願いします。

  • 『Webscan.exeを終了します』のエラーが出ます。

    WIN2000を使用していますが、起動時に「アプリケーションエラー エラーが発生したためWebscan.exeを終了します。プログラムをもう一度開始する必要があります。エラーログを作成しています。」というエラーが発生します。 ウィルス情報などを調べましたが、該当するようなものが見当たりません。どうしたら消えるでしょうか。

  • 【VB2005】Exeファイル作成について

    質問です。 VB2005で作成したアプリケーションを"Exe"にして VB2005が無いマシンでも動くようにしたいと思います。 フレームワークをインストールしないことを前提になると難しいでしょうか? ReleaseフォルダのExeなら動くと思ったのですが。 アドヴァイスお願いします。

  • .exeファイルの操作の仕方

    VBでTest.Exe実行ファイルを作り。 他プロジェクト(Test2.exe)からその実行ファイル(Test.exe)を起動する方法を、 教えてください。 また、その(Test.exe)内の Public sub を呼び出す事は可能ですか?(Test2.exe)から。 宜しくお願いします。

専門家に質問してみよう