VBSでの引数の渡し方と参照方法
- 2020.09.10
- WSH/VBS備忘録
VBSでの引数の渡し方と参照方法
システム化を進めていく中で、必ず必要となるのが【共通機能(共通動作)の切り出し】です。
これには引数としてその時変数に入っている値を渡す動作がほぼセットでついて回ります。
VBSでシステムを作成していくにあたり、個人的に上手くできなかった方法を備忘録として記しておきます。
ハネられた共通処理について
- 別ファイルに分けたVBScriptのFunction部の呼出し
- カンマの入る引数の引き渡し
- シングルクォーテーション( ’ )の入った引数の引き渡し
- スペースの入る引数の引き渡し
- 引数を( )で囲うとエラー
それぞれに対処方法はあります。
別ファイルのFunctionを呼び出すには、別ファイル内でCallしたりsubなどにFunctionを呼び出すコードを書いて置けばOKです。この時、別ファイルへフラグとなる引数を渡して置けば「どのファイルから来たか」での動作変更も組めます。
私はFunctionを直接呼び出そうと思って区分けをしていたのでこれにはやられました。
私が知識不足なだけで何かやり方はあるのだと思いますが…。
具体例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
'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") |
まとめ
まぁ郷に入っては郷に従えでしかないので覚えて回避ですね。
でもなぁ~、なんかやり方はあると思うんだよなぁ~。
-
前の記事
「機内のマスク着用」是非とか「大麻利用」だとか色々世間は騒いでますが 2020.09.10
-
次の記事
PHPでCSVを読み込んだら配列に異常が出ていた件 2020.09.10
コメントを残す