• ベストアンサー

他のアプリの終了

また、質問ですがよろしくお願いします。 いま、コマンドボタン1でテキストエディターを開くような物をつくっています。 そこでコマンドボタン2をおしたらテキストエディターを(保存しないで)終了したいのですが、サンプルコードを教えて貰えないでしょうか。 補足ですがテキストエディターが開いても保存フォルダを指定し保存するVBwindowが最前面処理で動いてます。windowをactiveにしてsendkeyで終わらすことはできないですよね? よろしくお願いします。 環境VB6

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

  • ベストアンサー
回答No.2

>とりあえず、調べなおすと簡単にできました(汗) しっかり調べられたようですね^^ (いつも)反感を買うのではと、ちょっとヒヤヒヤしながら発言をしております。 個人的に厳しい発言をするときは、何らかの意味を持って行うようにしているつもりです。 そして、たぶん 「TerminateProcess」 を見つけて、APIの利用方法で再質問してくるかな? と思っておりました。 しかし、APIをしっかり使いこなしていらっしゃるようですね^^ そこで、余談です。 TerminateProcess = Terminate + Process OpenProcess = Open + Process [プロセス+どうする] という組み合わせから生まれている命令です。 そこで「Terminate」という言葉で、VBカテ内をもう一度検索をかけてみると [EXEファイルのタイトル取得] http://okwave.jp/kotaeru.php3?q=558701 がヒットします。 #5さんの発言に、それらしき物があることと、APIを利用していないということに気づくと思います。 スクリプトで、EXEのパスからオブジェクトを探し、強制終了するやり方をしております。 それをちょっとだけ改造し、Shell関数で起動したプロセスのシャットダウンをする方法を張っておきますね^^ Sub Test()   Dim lngPID As Long   lngPID = Shell("calc")      MsgBox "OKを押すと終了させます", vbSystemModal      Call MyTerminate(lngPID)    End Sub Private Sub MyTerminate(ByVal p_lngPID As Long)   Dim strSQL As String   Dim objProc As Object   Dim lngSts As Long   Dim strWk  As String      strSQL = "SELECT * FROM Win32_Process where handle = " & p_lngPID   For Each objProc In VBA.GetObject("winmgmts:").ExecQuery(strSQL)     lngSts = objProc.Terminate        Select Case lngSts       Case 0     '正常終了         Exit For       Case 2:   strWk = "アクセスが拒否されました"       Case 3:   strWk = "権限が不足しています"       Case 8:   strWk = "不明なエラーです"       Case 9:   strWk = "パスが見つかりません"       Case 21:  strWk = "パラメータが不正です"       Case Else: strWk = "予期せぬエラー:" & lngSts     End Select          MsgBox strWk   Next objProc End Sub

hike106
質問者

お礼

1050YENさん、今回はありがとうございました。 上記のコードも参考にしたいと思います。 また何か分からないことがあると質問すると思いますが、よろしくお願いします。

その他の回答 (2)

回答No.3

今見たら、、、 >VBA.GetObject("winmgmts:").ExecQuery(strSQL) となっていた部分ですが、ExcelVBAで書いていたので、気づきませんでした。 そのままVBで走ればよいのですが、訂正をしておきます。 >VBA.GetObject("winmgmts:").ExecQuery(strSQL) ⇒GetObject("winmgmts:").ExecQuery(strSQL)

回答No.1

あなたの質問のタイトル >他のアプリの終了 で、ここの掲示板のVBカテゴリで履歴を検索したら、21件ヒットしました。 全てが全て、あなたの望む回答ではないとは思いますが、それらを参考にしてください。 目的に沿わない内容でも、目を通すだけで、予備知識を得るというスキルアップになりますよ。 参考にしたものの中で、わからない部分があったら ・参考にしたURL ・参考URLのどの部分がわからないか を示すと、この書き込みを見ている人も、アドバイスがしやすいと思います。 またそのURLに、質問者さん独自の拡張機能が必要である場合も、その旨を示すとよいと思います。

hike106
質問者

お礼

すみません、少し甘えてました。 検索し、過去ログはみたのですがうまくいかなかったので楽しようと思ってしまいました。(反省) とりあえず、調べなおすと簡単にできました(汗) Dim hProcess As Long hProcess = OpenProcess(SYNCHRONIZE Or PROCESS_TERMINATE, True, retval) 'retvalはプロセスID Call TerminateProcess(hProcess, 0&) Call CloseHandle(hProcess) モジュール省略 とりあえず、動いたのですがもし問題ある書き方ならご意見おねがいします。

関連するQ&A