[VBScript] 指定した名前のプロセスを強制終了するツール
2021年 05月 27日
タスクマネージャーに残ったプロセスを一つひとつ終了させるのは面倒。こういうときは強制終了処理をツール化すればよい。
- [VBScript] アンケートのような大量の定型データをExcelへ自動集計する
上記のようなExcelマクロの開発では、開発中の不具合でしょっちゅうExcelプロセスを残してしまう。
こういった意図せず残してしまったプロセスは、「指定プロセスの強制終了ツール」でカンタンに終了できる!
指定プロセスの強制終了ツールのダウンロードと使い方
- ダウンロード
- 使い方は、実行して上図のダイアログにプロセス名を入れる、だけ。
強制終了ツールはVBScriptのみでも実現可能。けれど……。
- 以下のような処理を組めば、VBScriptのみで任意のプロセスを終了させることもできます。
けれど、VBScriptのみで実現することにこだわらなくても良いですよね。
TerminateProcess関数のソース(WbemScripting.SWbemLocator利用版)
TerminateProcess("iexplore.exe")
'-------------------------------------------------------------------------------
' 指定した名前のプロセスを強制終了する
'-------------------------------------------------------------------------------
Sub TerminateProcess(ProcessName)
Dim Service,QfeSet,Qfe
Set Service = CreateObject("WbemScripting.SWbemLocator").ConnectServer
Set QfeSet = Service.ExecQuery("Select * From Win32_Process Where Caption='" & ProcessName & "'")
For Each Qfe In QfeSet
Qfe.Terminate
Next
End Sub
コマンドプロンプトを利用すればもっとシンプルに実装できます。
TerminateProcess関数のソース(コマンドプロンプト利用版)
TerminateProcess("iexplore.exe")
'-------------------------------------------------------------------------------
' 指定した名前のプロセスを強制終了する
'-------------------------------------------------------------------------------
Sub TerminateProcess(ProcessName)
Dim objWS: Set objWS = CreateObject("WScript.Shell")
' 強制終了を実行(非表示のコマンドプロンプトで「TASKKILL」コマンドを実行させる)
objWS.Run "cmd /c taskkill /f /im " & s & "*", 0, True
End Sub
この記事での気付き
- VBScriptのみでの対応ではなく、コマンドプロンプトのハイブリット開発が効率的!
- 文字列処理は、VBScript
- プロセスの強制終了は、コマンドプロンプト
VBScriptに限らず、こういった処理系を使い分けるという考え方、超重要ですよ。
→ 親子の関係は「上司と部下」。「友達」には決してなるな!
2012/5/27掲載記事の更新。
今回開発したプログラムソース
Dim objWS: Set objWS = CreateObject("WScript.Shell")
Dim objFS: Set objFS = CreateObject("Scripting.FileSystemObject")
Dim s
s = WScript.ScriptFullName
' 設定ファイル名を生成
Dim fpth
fpth = objFS.GetParentFolderName(s) & "\" & objFS.GetBaseName(s) & "_設定.txt"
' 設定を取得
s = ""
If objFS.FileExists(fpth) Then s = objFS.OpenTextFile(fpth, 1).ReadLine
s = InputBox("プロセス名を入力ください", "プロセスの強制終了", s)
If s = "" Then WScript.Quit
' 設定を保存
objFS.CreateTextFile(fpth, True).WriteLine s
' 強制終了を実行(非表示のコマンドプロンプトで「TASKKILL」コマンドを実行させる)
objWS.Run "cmd /c taskkill /f /im " & s & "*", 0