VBSでの引数の渡し方と参照方法
VBSでの引数の渡し方と参照方法
システム化を進めていく中で、必ず必要となるのが【共通機能(共通動作)の切り出し】です。
これには引数としてその時変数に入っている値を渡す動作がほぼセットでついて回ります。
VBSでシステムを作成していくにあたり、個人的に上手くできなかった方法を備忘録として記しておきます。
ハネられた共通処理について
- 別ファイルに分けたVBScriptのFunction部の呼出し
- カンマの入る引数の引き渡し
- シングルクォーテーション( ’ )の入った引数の引き渡し
- スペースの入る引数の引き渡し
- 引数を( )で囲うとエラー
それぞれに対処方法はあります。
別ファイルのFunctionを呼び出すには、別ファイル内でCallしたりsubなどにFunctionを呼び出すコードを書いて置けばOKです。この時、別ファイルへフラグとなる引数を渡して置けば「どのファイルから来たか」での動作変更も組めます。
私はFunctionを直接呼び出そうと思って区分けをしていたのでこれにはやられました。
私が知識不足なだけで何かやり方はあるのだと思いますが...。
具体例
'OKな例
’別ファイルのスクリプトを読み込む
objAct.Run ("activeCh.vbs iexplore.exe")
'activeCh.vbs中身
'------------------------------
Option Explicit
Dim strIEexe
Dim intProcID
strIEexe = Wscript.Arguments(0)
'subを動かす
call ActiveIE
'▼sub中身
sub ActiveIE()
Dim objWshShell
'Functionを動かす
GetProcID(strIEexe)
If intProcID = 0 Then
WScript.Quit(0)
Exit Sub
End If
Set objWshShell = WScript.CreateObject("WScript.Shell")
objWshShell.AppActivate intProcID
Set objWshShell = Nothing
End Sub
'▼Function中身
Function GetProcID(ProcessName)
Dim Service
Dim QfeSet
Dim Qfe
Set Service = WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer
Set QfeSet = Service.ExecQuery("Select * From Win32_Process Where Caption='"& ProcessName &"'")
intProcID = 0
For Each Qfe in QfeSet
intProcID = Qfe.ProcessId
Exit For
Next
GetProcID = intProcID <> 0
End Function
'------------------------------
'NGな例 ※hoge=>function名
objAct.Run ("activeCh.vbs::hoge iexplore.exe")
objAct.Run ("activeCh.vbs(hoge) iexplore.exe")
objAct.Run ("activeCh.vbs[hoge] iexplore.exe")
objAct.Run ("activeCh.vbs hoge iexplore.exe")
まとめ
まぁ郷に入っては郷に従えでしかないので覚えて回避ですね。
でもなぁ~、なんかやり方はあると思うんだよなぁ~。


