- ベストアンサー
他のアプリの終了
また、質問ですがよろしくお願いします。 いま、コマンドボタン1でテキストエディターを開くような物をつくっています。 そこでコマンドボタン2をおしたらテキストエディターを(保存しないで)終了したいのですが、サンプルコードを教えて貰えないでしょうか。 補足ですがテキストエディターが開いても保存フォルダを指定し保存するVBwindowが最前面処理で動いてます。windowをactiveにしてsendkeyで終わらすことはできないですよね? よろしくお願いします。 環境VB6
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>とりあえず、調べなおすと簡単にできました(汗) しっかり調べられたようですね^^ (いつも)反感を買うのではと、ちょっとヒヤヒヤしながら発言をしております。 個人的に厳しい発言をするときは、何らかの意味を持って行うようにしているつもりです。 そして、たぶん 「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
その他の回答 (2)
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
今見たら、、、 >VBA.GetObject("winmgmts:").ExecQuery(strSQL) となっていた部分ですが、ExcelVBAで書いていたので、気づきませんでした。 そのままVBで走ればよいのですが、訂正をしておきます。 >VBA.GetObject("winmgmts:").ExecQuery(strSQL) ⇒GetObject("winmgmts:").ExecQuery(strSQL)
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
あなたの質問のタイトル >他のアプリの終了 で、ここの掲示板のVBカテゴリで履歴を検索したら、21件ヒットしました。 全てが全て、あなたの望む回答ではないとは思いますが、それらを参考にしてください。 目的に沿わない内容でも、目を通すだけで、予備知識を得るというスキルアップになりますよ。 参考にしたものの中で、わからない部分があったら ・参考にしたURL ・参考URLのどの部分がわからないか を示すと、この書き込みを見ている人も、アドバイスがしやすいと思います。 またそのURLに、質問者さん独自の拡張機能が必要である場合も、その旨を示すとよいと思います。
お礼
すみません、少し甘えてました。 検索し、過去ログはみたのですがうまくいかなかったので楽しようと思ってしまいました。(反省) とりあえず、調べなおすと簡単にできました(汗) Dim hProcess As Long hProcess = OpenProcess(SYNCHRONIZE Or PROCESS_TERMINATE, True, retval) 'retvalはプロセスID Call TerminateProcess(hProcess, 0&) Call CloseHandle(hProcess) モジュール省略 とりあえず、動いたのですがもし問題ある書き方ならご意見おねがいします。
お礼
1050YENさん、今回はありがとうございました。 上記のコードも参考にしたいと思います。 また何か分からないことがあると質問すると思いますが、よろしくお願いします。