・・・新作スクリプト。
って、内容としては、プロセスを プロセス名指定で終了させるだけのありがち過ぎるモノ。
まぁ、MS-DOSコマンドの Killコマンドの代替、Taskkillコマンドを利用すれば同じなんだが、
それだとコマンドプロンプトが表示されてスマートじゃないってコトで軽く作成してみた。
要望主へのTipsしつつの制作だったから、iniからの読み込みで とかはやってない。
コマンドラインパラメータで、ある程度の数のプロセスを任意に指定して終了させるだけに絞った。
■ 概要 ■
書式)
tProcess.vbs {開始までの待ち時間(ms)} プロセス名 {プロセス名} {プロセス名}・・・
ないし、
tProcess.vbe {開始までの待ち時間(ms)} プロセス名 {プロセス名} {プロセス名}・・・ |
▲ このウチ、
パラメータに関しては、
・カッコ{}の箇所は省略可。
・先頭引数(最初のパラメータ)が 数字として認識出来るモノなら 停止処理開始までの待ち時間として扱われる。
・プロセス名は 大文字/小文字も完全に一致している必要がある。 |
・・・と、なっている。 |
■ 用法 ■
tProcess.vbsファイルを任意の運用フォルダにレイアウトしてショートカットを作成し、
そのショートカットのプロパティで [ショートカット]タブの[リンク先]枠を・・・
"C:\Program Files\Okitsunesama\Scripts\ProcessTerminator\tProcess.vbs" 1000 notepad.exe "全角文字ファイル.exe" |
▲ このように パラメータを半角スペースで区切りつつ、全角文字やスペースがファイル名に含まれる場合は
ダブルクォーテーションで囲んで追記し準備完了。 (この例は .vbsファイルの場合)
ショートカットパラメーター文字数上限以下であれば、ショートカットの[リンク先]枠内や
コマンドラインパラメーターとして並べた対象の順序で、処理が実行される。
用途別にショートカットの名前を変えれば、スクリプト本体1つで、複数の処理セットを設置しておける。
|
■ スクリプト本体 ■
・tProcess.vbs
Option Explicit
Dim My, Parameters
Set My = WScript
With My
Set Parameters = .Arguments
If Parameters.Count <= 0 Then
.Quit
End If
End With
Dim Pc, strTarget, objProcS, objProc
On Error Resume Next
If IsNumeric(Parameters(0)) Then
If Parameters.Count > 1 Then
My.Sleep Parameters(0)
Pc = 0
Else
My.Quit
End If
Else
Pc = 1
End If
For Each strTarget in Parameters
If Pc = 0 Then
Pc = 1
Else
Set objProcS = GetObject("winmgmts:").InstancesOf("win32_process")
For Each objProc In objProcS
If CStr(objProc.Name) = strTarget Then
objProc.Terminate
My.Sleep 300
End If
Next
Set objProcS = Nothing
End If
Next
Set My = Nothing
|
|
◆ ついでに・・・
自己解凍zipで おきつね仕様のインストーラも作ってみた。
自分でvbsファイルを設置するのが面倒な向きに・・・
注)
このインストーラでデスクトップに出来るアイコンは あくまでテンプレートで、そのままでは機能しないようにしてあります。
そのショートカットをコピーし、[プロパティ]画面 [ショートカット]タブ [リンク先]枠に 任意で、
処理開始までの待機時間や、対象プロセス名 を 追記して 利用して下さい。 |
Okitsunesama
・・・機能追加。
■ 概要 ■
基本的な用法や記述ルールは ほぼ同じまま。 変わったのは・・・
◆ 先頭にしか指定出来なかった待機時間を、プロセスの前後に任意で設置出来る様になった。
◆ プロセス名として、
■ フルパス指定で先頭に + つけると、実行開始対象として扱われます。
▼ msi AfterburnerRemoteServerを開始する例。
"C:\~省略~\tProcess.vbe" "+C:\Program Files (x86)\~省略~\MSIAfterburnerRemoteServer.exe" |
ファイル名記述ルールの関係で コチラの利用にはダブルクォーテーション囲む事が必須になる。
■ プロセス終了対象に限り、ワイルドカード符号 * で、先頭文字列一致に暫定対応。
▼ ワイルドカード指定で BlueStacksを終了させる例。
"C:\Program Files\Okitsunesama\Scripts\ProcessTerminator\tProcess.vbe" HD-* |
・・・拡張子識別は憑けていない、あくまで先頭文字列一致のみ。 |
|
◆ これら機能追加により・・・
■ 開始/終了の対象 と 待機時間 を 複数列挙して利用出来るようになっています。
▼ 待機時間指定ナシで、BlueStacksを終了させ、msi AfterburnerRemoteServerを開始する例。
"C:\~省略~\tProcess.vbe" HD-* "+C:\Program Files (x86)\~省略~\MSIAfterburnerRemoteServer.exe" |
▼ 開始待機時間1秒の後、BlueStacksを終了させつつ 6秒待機し、
"C:\~省略~\tProcess.vbe" 1000 HD-* 6000 "+C:\Program Files (x86)\~省略~RemoteServer.exe" 5000 |
・・・ msi AfterburnerRemoteServerを開始しつつ 5秒待機する例。 |
|
|
以下に そのスクリプトソースを・・・
■ スクリプト本体 ■
・tProcess.vbs
Option Explicit
Dim My, Parameters, MySh, Fs
Set My = WScript
With My
Set Parameters = .Arguments
If Parameters.Count <= 0 Then
.Quit
End If
Set MySh = .CreateObject("WScript.Shell")
Set Fs = .CreateObject("Scripting.FileSystemObject")
End With
Const vbWq = """"
Public Pc
Public objProcS, objProc
Dim iTarget
On Error Resume Next
For Each iTarget in Parameters
If IsNumeric(iTarget) Then
If Parameters.Count > 1 Then
My.Sleep Clng(iTarget)
Pc = 0
Else
My.Quit
End If
Else
If Left(iTarget, 1) = "+" Then
iTarget = Replace(iTarget, "+", "")
pExecute iTarget,,,,False
Else
pTerminate iTarget
End If
End If
Next
Set MySh = Nothing
Set Fs = Nothing
Set My = Nothing
Function chkParam(tgtParam)
Dim Result
Result = False
If TypeName(tgtParam) = "Error" Then
ElseIf IsEmpty(tgtParam) or tgtParam = "" Then
Else
Result = True
End If
chkParam = Result
End Function
Function pExecute(strExe, strPram, strExType, intType, Wait)
Dim sWq, pWq, rName, rTarget, wType, eWait, sSec
If Fs.FileExists(strExe) Then
sWq = vbWq
pWq = vbWq
If chkParam(strExType) Then
If Ucase(CStr(strExType)) = "DDE" Then
sWq = ""
pWq = ""
ElseIf Ucase(CStr(strExType)) = "PNWQ" Then
pWq = ""
End If
End If
rName = vbWq & Fs.GetBaseName(strExe) & vbWq
rTarget = sWq & CStr(strExe) & sWq
If chkParam(strPram) Then
rTarget = rTarget & " " & pWq & Cstr(strPram) & pWq
End If
If chkParam(intType) Then
If IsNumeric(intType) Then
wType = Cint(intType)
Else
wType = 0
End If
End If
eWait = False
sSec = 0
If chkParam(Wait) Then
If IsNumeric(Wait) Then
sSec = Clng(Wait)
Else
eWait = Wait
End If
End If
MySh.Run rTarget, wType, eWait
My.Sleep sSec
End If
End Function
Function pTerminate(strProc)
Dim intProc, nProc
If Right(strProc, 1) = "*" Then
strProc = Replace(strProc, "*", "")
End If
intProc = Len(strProc)
If intProc <= 0 Then
Else
Set objProcS = GetObject("winmgmts:").InstancesOf("win32_process")
For Each objProc In objProcS
nProc = CStr(objProc.Name)
nProc = Left(nProc, intProc)
If nProc = strProc Then
objProc.Terminate
My.Sleep 200
End If
Next
Set objProcS = Nothing
End If
End Function
|
|
◆ コッチも別途・・・
自己解凍zipで おきつね仕様のインストーラを・・・
注)
前出のモノ同様、インストールしてデスクトップに出来るアイコンは、あくまでテンプレートで そのままでは機能しません。
そのショートカットをコピーし、[プロパティ]画面 [ショートカット]タブ [リンク先]枠に 任意で、
対象プロセス名 や 実行したいプログラムファイルのフルパス名、待機時間などを 追記して 利用して下さい。 |
Okitsunesama
・・・おきつねさまの運用の都合もあり、ココまで組んでは診たのだが。
コマンドラインパラメータの長さ(文字数)制限は、実行開始指定に用いるとなると これがかなり深刻で、
精々2つのプログラムを枠に記述出来るかドウかって域・・・
多数のアプリケーションの終了や開始を 細かくスケジュールしたいとなると、iniファイルを用いるタイプでないと対応は難しいだろう・・・
と云うか、アプリケーションの起動をiniファイルでスケジュールするだけのモノなら、過去構成した物が既にあり、
(実際今回 Function pExecute に 関しては、ソチラのMainRoutineから処理を複製し、関数化した)
コレは普段から利用しているので、ソチラに "プロセスの終了処理" を追加したほうが、恐らくは早いだろうな・・・(´ヘ`;)
Okitsunesama
・・・再度機能追加。
■ 概要 ■
・ファイルの実行指定時に必要だった + 文字を、フルパス指定の
実行ファイル名文字列で指定したファイルが存在している場合のみ不要に。 |
|
■ スクリプト本体 ■
Option Explicit
Dim My, Parameters, MySh, Fs
Set My = WScript
With My
Set Parameters = .Arguments
If Parameters.Count <= 0 Then
.Quit
End If
Set MySh = .CreateObject("WScript.Shell")
Set Fs = .CreateObject("Scripting.FileSystemObject")
End With
Const vbWq = """"
Public Pc
Public objProcS, objProc
Dim iTarget
On Error Resume Next
For Each iTarget in Parameters
If IsNumeric(iTarget) Then
If Parameters.Count > 1 Then
My.Sleep Clng(iTarget)
Pc = 0
Else
My.Quit
End If
ElseIf Fs.FileExists(iTarget) Then
pExecute iTarget,,,,False
Else
If Left(iTarget, 1) = "+" Then
iTarget = Replace(iTarget, "+", "")
pExecute iTarget,,,,False
Else
pTerminate iTarget
End If
End If
Next
Set MySh = Nothing
Set Fs = Nothing
Set My = Nothing
Function chkParam(tgtParam)
Dim Result
Result = False
If TypeName(tgtParam) = "Error" Then
ElseIf IsEmpty(tgtParam) or tgtParam = "" Then
Else
Result = True
End If
chkParam = Result
End Function
Function pExecute(strExe, strPram, strExType, intType, Wait)
Dim sWq, pWq, rName, rTarget, wType, eWait, sSec
If Fs.FileExists(strExe) Then
sWq = vbWq
pWq = vbWq
If chkParam(strExType) Then
If Ucase(CStr(strExType)) = "DDE" Then
sWq = ""
pWq = ""
ElseIf Ucase(CStr(strExType)) = "PNWQ" Then
pWq = ""
End If
End If
rName = vbWq & Fs.GetBaseName(strExe) & vbWq
rTarget = sWq & CStr(strExe) & sWq
If chkParam(strPram) Then
rTarget = rTarget & " " & pWq & Cstr(strPram) & pWq
End If
If chkParam(intType) Then
If IsNumeric(intType) Then
wType = Cint(intType)
Else
wType = 0
End If
End If
eWait = False
sSec = 0
If chkParam(Wait) Then
If IsNumeric(Wait) Then
sSec = Clng(Wait)
Else
eWait = Wait
End If
End If
MySh.Run rTarget, wType, eWait
My.Sleep sSec
End If
End Function
Function pTerminate(strProc)
Dim intProc, nProc
If Right(strProc, 1) = "*" Then
strProc = Replace(strProc, "*", "")
End If
intProc = Len(strProc)
If intProc <= 0 Then
Else
Set objProcS = GetObject("winmgmts:").InstancesOf("win32_process")
For Each objProc In objProcS
nProc = CStr(objProc.Name)
nProc = Left(nProc, intProc)
If nProc = strProc Then
objProc.Terminate
My.Sleep 200
End If
Next
Set objProcS = Nothing
End If
End Function |
・・・の様にした上で、
・・・更に調整。
Option Explicit
Dim My, Parameters, MySh, Fs
Set My = WScript
With My
Set Parameters = .Arguments
If Parameters.Count <= 0 Then
.Quit
End If
Set MySh = .CreateObject("WScript.Shell")
Set Fs = .CreateObject("Scripting.FileSystemObject")
End With
Const vbWq = """"
Public Pc
Public objProcS, objProc
Dim iTarget
On Error Resume Next
For Each iTarget in Parameters
If IsNumeric(iTarget) Then
If Parameters.Count > 1 Then
My.Sleep Clng(iTarget)
Pc = 0
Else
My.Quit
End If
ElseIf Left(iTarget, 1) = "+" Then
iTarget = Replace(iTarget, "+", "")
pExecute iTarget,,,,False
Else
If pExecute(iTarget,,,,False) Then
Else
pTerminate iTarget
End If
End If
Next
Set MySh = Nothing
Set Fs = Nothing
Set My = Nothing
Function chkParam(tgtParam)
Dim Result
Result = False
If TypeName(tgtParam) = "Error" Then
ElseIf IsEmpty(tgtParam) or tgtParam = "" Then
Else
Result = True
End If
chkParam = Result
End Function
Function pExecute(strExe, strPram, strExType, intType, Wait)
Dim sWq, pWq, rName, rTarget, wType, eWait, sSec
If Fs.FileExists(strExe) Then
sWq = vbWq
pWq = vbWq
If chkParam(strExType) Then
If Ucase(CStr(strExType)) = "DDE" Then
sWq = ""
pWq = ""
ElseIf Ucase(CStr(strExType)) = "PNWQ" Then
pWq = ""
End If
End If
rName = vbWq & Fs.GetBaseName(strExe) & vbWq
rTarget = sWq & CStr(strExe) & sWq
If chkParam(strPram) Then
rTarget = rTarget & " " & pWq & Cstr(strPram) & pWq
End If
If chkParam(intType) Then
If IsNumeric(intType) Then
wType = Cint(intType)
Else
wType = 0
End If
End If
eWait = False
sSec = 0
If chkParam(Wait) Then
If IsNumeric(Wait) Then
sSec = Clng(Wait)
Else
eWait = Wait
End If
End If
MySh.Run rTarget, wType, eWait
My.Sleep sSec
pExecute = True
Else
pExecute = False
End If
End Function
Function pTerminate(strProc)
Dim intProc, nProc
If Right(strProc, 1) = "*" Then
strProc = Replace(strProc, "*", "")
End If
intProc = Len(strProc)
If intProc <= 0 Then
Else
Set objProcS = GetObject("winmgmts:").InstancesOf("win32_process")
For Each objProc In objProcS
nProc = CStr(objProc.Name)
nProc = Left(nProc, intProc)
If nProc = strProc Then
objProc.Terminate
My.Sleep 200
End If
Next
Set objProcS = Nothing
End If
End Function
|
|
Okitsunesama
・・・可能な範囲で仕上げたコトに。
■ 概要 ■
・pExecute を 改良し、スクリプトとして MySh.Run の 全機能を使える構造に変更。
■ 最終的には この様に [リンク先]に記述して利用するカタチになってます。
▼ 待機時間指定ナシで、BlueStacksを終了させ、msi AfterburnerRemoteServerを開始する例。
"C:\Program Files\Okitsunesama\Scripts\ProcessTerminator\tProcess.vbe" HD-* "C:\Program Files (x86)\MSI Afterburner\RemoteServer\MSIAfterburnerRemoteServer.exe" |
・・・コマンドプロンプトでの利用でも 同様の書式になります。
▼ 開始待機時間1秒の後、BlueStacksを終了させつつ 6秒待機し、
"C:\Program Files\Okitsunesama\Scripts\ProcessTerminator\tProcess.vbe" 1000 HD-* 6000 "C:\Program Files (x86)\MSI Afterburner\RemoteServer\MSIAfterburnerRemoteServer.exe,,,,5000" 4000 |
・・・ + 指定を使わずに msi AfterburnerRemoteServerを開始しつつ 5秒待機、その後 更に4秒待機する例。 |
また、起動するアプリケーションによっては、カレントディレクトリとしてのみ稼動するモノがあり、
そう云うタイプのモノは、VBScriptとショートカットの仕様の関係で、1つしか指定出来ません。
その対処方法とは・・・
ショートカットのプロパティ [ショートカット]タブで、
|
[作業フォルダ]に、そうしたプログラムの
導入されているフォルダを指定。 |
PSO2のランチャを起動し、[ゲーム開始]された 3min20sec後に PSO2ヨミ を 起動する [リンク先]の記述例。
"C:\Program Files\Okitsunesama\Scripts\ProcessTerminator\tProcess.vbe" "C:\Program Files (x86)\SEGA\PHANTASYSTARONLINE2\pso2_bin\pso2launcher.exe,,,,True" 200000 "C:\Program Files (Free)\StreamingSet\PSO2yomi\PSO2yomi.exe,,,,False" |
OP再生してから・・・ とかだと、300000(5min)くらいがイイみたい。
|
■ スクリプト本体 ■
Option Explicit
Dim My, Parameters, MySh, Fs
Set My = WScript
With My
Set Parameters = .Arguments
If Parameters.Count <= 0 Then
.Quit
End If
Set MySh = .CreateObject("WScript.Shell")
Set Fs = .CreateObject("Scripting.FileSystemObject")
End With
Const vbWq = """"
Public Pc
Public objProcS, objProc
Dim iTarget, arTargets
On Error Resume Next
For Each iTarget in Parameters
arTargets = Split(iTarget, ",")
If IsNumeric(arTargets(0)) Then
If Parameters.Count > 1 Then
My.Sleep Clng(arTargets(0))
Pc = 0
Else
My.Quit
End If
ElseIf Left(arTargets(0), 1) = "+" Then
arTargets(0) = Replace(arTargets(0), "+", "")
pExecute arTargets
Else
If pExecute(arTargets) Then
Else
pTerminate arTargets(0)
End If
End If
Next
Set MySh = Nothing
Set Fs = Nothing
Set My = Nothing
Function chkParam(tgtParam)
Dim Result
Result = False
If VarType(tgtParam) = 10 Then
ElseIf IsEmpty(tgtParam) or tgtParam = "" Then
Else
Result = True
End If
chkParam = Result
End Function
Function pExecute(arTargets)
On Error Resume Next
Dim intUBound, chkTgt4
Dim sWq, pWq, rName, rTarget, wType, eWait, sSec
If Fs.FileExists(arTargets(0)) Then
intUBound = UBound(arTargets)
sWq = vbWq
pWq = vbWq
If intUBound >= 2 Then
If chkParam(arTargets(2)) Then
If Ucase(CStr(arTargets(2))) = "DDE" Then
sWq = ""
pWq = ""
ElseIf Ucase(CStr(arTargets(2))) = "PNWQ" Then
pWq = ""
End If
End If
End If
rName = vbWq & Fs.GetBaseName(arTargets(0)) & vbWq
rTarget = sWq & CStr(arTargets(0)) & sWq
If intUBound >= 1 Then
If chkParam(arTargets(1)) Then
rTarget = rTarget & " " & pWq & Cstr(arTargets(1)) & pWq
End If
End If
wType = 10
If intUBound >= 3 Then
If chkParam(arTargets(3)) Then
If IsNumeric(arTargets(3)) Then
wType = arTargets(3)
End If
End If
End If
eWait = False
If intUBound >= 4 Then
If chkParam(arTargets(4)) Then
chkTgt4 = Clng(arTargets(4))
If VarType(chkTgt4) = 3 Then
sSec = arTargets(4)
Else
chkTgt4 = CBool(arTargets(4))
If VarType(chkTgt4) = 11 Then
eWait = arTargets(4)
End If
End If
End If
End If
MySh.Run rTarget, wType, eWait
My.Sleep sSec
pExecute = True
Else
pExecute = False
End If
End Function
Function pTerminate(strProc)
Dim intProc, nProc
If Right(strProc, 1) = "*" Then
strProc = Replace(strProc, "*", "")
End If
intProc = Len(strProc)
If intProc <= 0 Then
Else
Set objProcS = GetObject("winmgmts:").InstancesOf("win32_process")
For Each objProc In objProcS
nProc = CStr(objProc.Name)
nProc = Left(nProc, intProc)
If nProc = strProc Then
objProc.Terminate
My.Sleep 200
End If
Next
Set objProcS = Nothing
End If
End Function
|
|
◆ 例に寄って・・・
自己解凍zipで おきつね仕様のインストーラを・・・
注)
前出のモノ同様、インストールしてデスクトップに出来るアイコンは、あくまでテンプレートで そのままでは機能しません。
そのショートカットをコピーし、[プロパティ]画面 [ショートカット]タブ [リンク先]枠に 任意で、
対象プロセス名 や 実行したいプログラムファイルのフルパス名、待機時間などを 追記して 利用して下さい。 |
Okitsunesama
・・・常駐停止用途で このスクリプトを利用する場合についてメモ。
■ 概要 ■
・SYSTEMとして開始されたサービスのうち 終了できない対象があったので検証 |
|
◆ この2つは・・・
HD-UpdaterService.exe
HD-LogRotatorService.exe | サービスである為、現在の版の tProcessからは終了させる手段がありません。 |
|
もし これらの常駐を、Windowsの起動時にだけでも回避したいのなら、
[タスクマネージャ] の [サービス]タブ右下、[サービス]ボタンからも開ける [サービス]管理画面で、
BlueStacks Log Rotator Service
BlueStacks Updater Service | の2つの | [プロパティ]-[全般]タブ、[スタートアップの種類] で
[手動] ないし [無効](非推奨) | の いずれかを選択し、
設定しておくしかない模様。 |
| |
ただ、この設定を行っても・・・
BlueStacks を [スタートメニュー] や [デスクトップのアイコン] から任意で起動すると、
Log Rotator Service |
は、起動しませんが、 |
Updater Service |
は、仮に[無効]にしてあっても動作を開始し、
[スタートアップの種類] を [自動] に 戻してしまいます。 |
また、BlueStacks Android Service も Updater Service と 同様の挙動をします・・・ |
tProcess は、多くのプロセスを停止出来ます・・・ パラメータ指定を誤るとシステムプロセスも対象になる程に(^_^;)
しかし 20150503 090217現在、サービスを停止させる処理は追記していません。
利用の際は それらの点を充分に踏まえた上で、自己責任にてお願いします。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。