• 締切済み

他のアプリケーションの終了処理

Shell関数を使って起動した他アプリケーションを 今度はその、他アプリケーションからではなく、V Bで作成したメイン画面の終了と同時に終了させた いのですが方法、又は適切な文法が分かりません。 よろしくお願いします。 ※ちなみにVBで作成したメイン画面の終了と同時 に終了させたい他アプリケーションは1つだけです。 しかも決まったパスに置いていて、この先もずっと 固定です。条件としては以上です。

みんなの回答

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

起動したアプリがウィンドウを持つアプリであれば、 WindowsAPIのPostMessage()でWM_CLOSEをポストして終了させるのが安全です。 で、メッセージをポストするには送信先のウィンドウのウィンドウハンドル(hWnd)を取得する必要があります。 手軽にhWndを取得するにはWindowsAPIのFindWindow()を使うのが楽です。 Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Public Const WM_CLOSE = &H10 Sub ShutdownOtherApp 'ウィンドウハンドルの取得 Dim hWnd As Long hWnd = FindWindow(vbNullString, "終了させるウィンドウのキャプション") 'メッセージをポスト Call PostMessage(hWnd, WM_CLOSE, 0, 0) End Sub ただし、同じキャプションのウィンドウが複数立ち上がっている状態では、FindWindow()では ウィンドウを一意に特定できないので、Shellで起動したときの戻り値のプロセスIDと 同じプロセスであるかをチェックしながらウィンドウを調べていく必要があります。 列挙の方法はこちらをどうぞ。 http://www.vbvbvb.com/jp/gtips/0751/gEnumWindows.html Declare Function GetWindowThreadProcessId Lib "user32" Alias "GetWindowThreadProcessId" (ByVal hwnd As Long, lpdwProcessId As Long) As Long Dim PId As Long PId = Shell("アプリ名", vbNormalFocus) ・ ・ ・ '列挙されたウィンドウハンドルに対しての処理です。 Dim wndPId as Long 'ウィンドウハンドルからプロセスIDを取得 Call GetWindowThreadProcessId(hWnd. wndPId) '同一であれば起動したプロセスだということ If PId = wndPId Then 'WM_CLOSEをポスト Call PostMessage(hWnd, WM_CLOSE, 0, 0) End If

参考URL:
http://www.vbvbvb.com/jp/gtips/0751/gEnumWindows.html
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 前回の質問で他アプリケーションの終了の仕方はOKなのでしょうか。 (回答に対するお礼は補足がまったくないようですが。) いちおう参考URL載せますが。 http://www.users.gr.jp/ml/archive/vb/1708.asp (ただし、NT4.0はうまくいかないらしい。) で、あとはこれをメイン画面(フォーム)のUnLoadイベントにでも記述すればいいんじゃないでしょうか。

参考URL:
http://www.users.gr.jp/ml/archive/vb/1708.asp

関連するQ&A

  • 他アプリケーションの終了

    Shell関数を使って起動した他アプリケーションを 今度はその、他アプリケーションからではなく、V Bで作成したメイン画面の終了と同時に終了させた いのですが方法、又は適切な文法が分かりません。 よろしくお願いします。

  • 外部アプリケーションをタスクバーから元のサイズに

    VB2005の初心者です。 色々調べたつもりなのですが解らなくて・・・。 外部アプリケーションをshell関数やProcess.Start("○○.EXE")などで起動は出来るのですが、起動後、一旦VB2005アプリケーションで作業を行う為、最小化しています。VB2005アプリケーションのある作業を終了したとき自動的に最小化した外部アプリケーションを元のサイズに戻しアクティブにしたいのですがよく解りません、制御する方法を教えて頂けないでしょうか。

  • エクセルVBAで使うShell関数について

    現在、初心者ながらもエクセルを使って動画や音楽を検索して再生するソフトを作っています。 指定したファイルを、指定したアプリケーションで起動して開きたいと思い、ネットを使って調べたら2つの異なるShellの書き方で動かす方法が見つかりました。 2つのShell関数は同じものなのか教えて下さい。 (1) ret = Shell(Winamp_Path & "winamp.exe /ADD " & """" & Path) と、言う Shell(アプリケーションのフルパス/ADD""ファイルのフルパス) と書いてファイルをアプリケーションで開く方法。 (2) Call Shell(Path & oFile, vbNormalFocus) と、言う Shell(アプリケーションのフルパス, 起動時のウィンドウの状態) と書いてアプリケーションを起動する方法。 この2つは同じ種類のShell関数なのでしょうか。 (1)は、ファイルも一種のアプリケーションとして扱われているんでしょうか。 (2)がShell関数の基本型のようですが、(1)のような書き方が見つかってからは、他にも違う書き方があるかと思うと気になって仕方無いです。 使い方の違いは分かったのですが、調べても(2)の使い方や、別の関数や言語、APIを使ったアプリケーションの書き方しか見つからず、 エクセル2007VBのヘルプを見ても(2)の使い方しか見つからず、 Googleで、「エクセル Shell関数」と調べても、2つの違いが書かれている所が見つからなかったので質問しました。 ※この2つと違う、アプリケーションを起動するShellの記述があるなら、詳しくではなく、参考程度に教えて頂けると、とても嬉しいです。 頭の悪い質問だと思いますが、是非ともアドバイス、宜しくお願いします。

  • 処理途中で終了

    いつもお世話になっております! VB6.0でコピーの処理を作っているのですが そのコピー中に終了してメイン画面に 戻るためにコピー処理を途中で終了させたいのですが うまくいきません。どうにかできないでしょうか? 皆さん宜しくお願いします!

  • アプリケーションの作成方法について

    お世話になります。 VB2005でのアプリケーションの作成方法を教えてください。 たとえばマスタ画面が5画面、トランザクション画面が10画面、帳票作成画面が5画面ほどあるシステムの場合、 プロジェクトは1つで作るものなのでしょうか。それともソリューション内でいくつかのプロジェクトに分けて作るものなのでしょうか。 1つのプロジェクトの場合は、各画面の呼び出しはShowDialogで呼び出せばよいと思いますが、プロジェクトを分けると実行ファイルがその数だけできますよね。それぞれの呼び出しはShellで呼び出すのですか。 ただ、VB2005で作成した実行ファイルは起動が遅いということをよく聞きますので、呼び出すたびに時間がかかるのではそれも困ります。 実際に作成していらっしゃる方、どのようにしていらっしゃるのか教えてください。よろしくお願いします。

  • 他のアプリケーションとの連携

     VBを使って他の既存のソフトなどへ何らかの命令をかけることは可能でしょうか?    具体的には起動中のほかのアプリケーションへキー操作をさせる…というようなことは可能でしょうか?  たとえば、コマンドを設置しておいて、そのコマンドをクリックすると起動中の別のアプリケーション上でEnterキーを押した状態を引き起こさせるというようなことです。    また、それとは逆に他のアプリケーションを監視して、キーが押されたときに反応させるというようなことは可能でしょうか?  API関数等を使用するのでしたらどういう関数を使用すればよいか教えてください。  よろしくお願いします。

  • 他アプリケーション’(ウィンドウ)のハンドル取得方法

     GetWindowTextを用いて、他ウィンドウ、他アプリケーション内のテキストボックスに表示されている、文字列を取得したいです。他アプリケーションは、自分のアプリケーションから、shell関数を用いて起動します。他ウィンドウのハンドル値は、shellの返り値でわかるのですが、テキストボックスのハンドル値が分かりません。 どなたか、 ご教授願います。 おねがいします。

  • vbのアプリケーション終了

    RS232cで繋がれた外部媒体と通信を行うアプリケーションをVBで作成しました。 通信を行った(オープン・クローズをきちんと実施)後、endコマンドによりアプリを終了させようとしたんですが、終わりませんでした どんな問題が考えられるのでしょうか? どうかよろしくお願いいたします。

  • EXCEL VBA で他のアプリケーションを開く方法について

    EXCEL VBAで他のアプリケーションを開く方法について教えていただきたいことがあります。 現在開いているエクセルのブックと同じフォルダにある、"AAA"という名称のsqc形式のファイル(EAST社のSkyLink Ver9.0のコマンドファイルです)をVBAで開く。 SHELL関数で開くと思っていたのですが、 Sub Test() Dim MyPath As String, MyTask As Double MyPath = ActiveWorkbook.Path & "\" MyTask = Shell(MyPath & "AAA.sqc") SendKeys "%FO", True End Sub とすると 「プロシージャの呼び出し、または引数が不正です」 というメッセージが出てしまいます。 如何せんSHELL関数を使うのが初めてでして、色々調べても どうしても解決策にたどり着きません。 どうぞよろしくお願いいたします。

  • コンソールアプリケーションの終了コードの設定方法

    VB.NETでコンソールアプリケーションを作成したいのですが、このアプリケーションの呼び出し結果を判定し、異常であれば、それなりの処置をしたいと考えています。 VBで作成したコンソールアプリケーションで、終了コードを設定することは可能なのでしょうか。(C言語のexit命令のようなものを想定しています)可能であれば、どのような命令を使用するのでしょうか。

専門家に質問してみよう