(for Internet Explorer)
← ▼ ▲
↑
Priority (MakeRule)
Dim MakeRule::Priority as integer
優先度。 大きいほど優先する。
(src)
同じ MakeRule::Target の値を持つ MakeRule が複数あるときは、その複数の中で、
MakeRule::Priority が最も大きい MakeRule::Command の関数だけが呼ばれます。
← ▼ ▲
NewestSource (MakeRule)
Property Get MakeRule::NewestSource() as string
最もタイムスタンプが新しい MakeRule::Sources 配列の要素。ファイルパス。
(src)
タイムスタンプを比較するタイミングは、この NewestSource プロパティを参照したときです。
← ▼ ▲
AllNewSource (MakeRule)
Property Get MakeRule::AllNewSource() as Array of string
(src)
MakeRule::Sources の中で、ターゲットよりタイムスタンプが新しいファイルパスの配列。
タイムスタンプを比較するタイミングは、この AllNewSource プロパティを参照したときです。
← ▼ ▲
MakeRule_compare
(src)
Function MakeRule_compare( TargetPath, SourcePath ) as boolean
タイムスタンプを比較して、メイク・コマンドを実行する状況かどうかを返す。
【引数】
TargetPath
SourcePath
ターゲット・ファイルのパス。 メイクルールの ： より左側
ソース・ファイルのパス。 メイクルールの ： より右側
返り値
メイク・コマンドを実行する状況かどうか
関連
→ File::DateLastModified
→ FileSystemObject::FileExists
→ DateAddStr
サンプル
If MakeRule_compare( "dst.txt", "src.txt" ) Then
copy_ren "src.txt", "dst.txt"
End If
← ▼ ▲
MakeFileClassConst
.Splitter (=1)
.OutDebugXML (=1)
.BreakBeforeCommand (=2)
.Watch (=4)
取得
get_MakeFileClassConst 関数、MakeFileClass::c、MakeRule::c
メンバー
→ Type_ (MakeRule)
→ DebugMode (MakeFileClass)
メイクファイルに関する定数
← ▼ ▲
子プロセスへの受け渡し (/ChildProcess オプション)
コマンドライン・パラメーター
に、/ChildProcess オプションを付け、XML ファイルによるデータ
メイン・プロセスから、任意のデータ（例：
）を渡し、子プロセスが終了したら
Err2::ErrID
メイン・プロセスに更新された データを返す、といったようなことができます。 このような
データの受け渡しができるようにするのが、/ChildProcess オプションによる子プロセス
の機能です。 OS が定義している子プロセスとは異なります。
cscript sample.vbs /ChildProcess:090401,1
/ChildProcess の右の値は、テンポラリ・フォルダにできるフォルダ名の数値の部分です。
テンポラリ・ファイル名は、下記のとおりです。 %Temp% は、C:\Document 〜 に変わります。
→ 子プロセス側が使う ChildProcess オブジェクト、get_ChildProcess
→ メイン・プロセス側が使う ParentProcess オブジェクト、new_ParentProcess
→ 処理フロー
%Temp%\Report\090401\ChildProcess_1\In.xml
%Temp%\Report\090401\ChildProcess_1\Out.xml
→ テンポラリ・フォルダ
参考
vbslib の RunProg 関数で、vbs ファイルを起動すると、自動的に VBScript を起動するときの
メイン・プロセス vbslib (WSH)
子プロセス vbslib (WSH)
の送受信ができるようになっています。 Shell::Run などで起動すると、/ChildProcess オプション
が自動的に付かないので、明示的に指定しない限り送受信できません。
→ テスト情報 I/F
→ T_ChildProcess1.vbs
テスト
(src)
XMLファイル
XMLファイル
vbslib では、エラー処理やデバッグ用に Err2 オブジェクトの送受信を自動的に必ず行います。
→ [T_ChildProcess]
→ InterProcessData インターフェース（ライブラリ用）
→ 困ったときは (/ChildProcess)
自動的に /ChildProcess オプションを付けないようにするには、/ChildProcess:0 を明示的に
指定します。
r= RunProg( "cscript sample.vbs /ChildProcess:0", "" )
VBScript でエラーを発生させるテストをするときに、/ChildProcess オプションが付くと、
Err2::ErrID などの値がメイン・プロセスから継承された値となり、Err2::ErrID の値が正しいか
どうかのチェックができなくなってしまいます。 それを回避するには、エラーを発生させるテスト・
スクリプトでは、/ChildProcess:0 オプションを付けてください。（下記）
/ChildProcess オプションが（自動的にでも）付くと、エラーレベル（プロセスの返り値）の値が 21
でないとエラーとみなし、メイン・プロセス側でもエラーを発生させます。
→ 正常終了時の動作
参考
cscript sample.vbs
→
← ▼ ▲
メイン・プロセス側が使う ParentProcess オブジェクト、new_ParentProcess
ParentProcess オブジェクトのメンバー
Class ParentChildProcess
Public m_OutFile 'as TextStream (Write) ... 子プロセスへ渡す XML ファイル
Public m_InXML 'as IXMLDOMElement ... メイン・プロセスに戻される ルートXML要素
Public m_TempPath ' as string. 送受信ファイルができるフォルダのパス
Public m_DateID ' as string. 例："090401". /ChildProcess オプションに渡す値
Public m_FileID ' as string. 例："1". /ChildProcess オプションに渡す値
End Class
sample.Name = "A" : sample.Value = 1
'// 子プロセス起動前に、送るオブジェクトをXMLファイルに変換する
Dim pr : new_ParentProcess_Object pr, Empty '//[out] pr as ParentChildProcess
pr.m_OutFile.WriteLine sample.xml
'// 子プロセスを起動する
Dim r : r= RunProg( "cscript.exe T_ChildProcess1_Sub.vbs", pr )
CheckTestErrLevel r
'// 子プロセス終了後に、戻されたXMLファイルをオブジェクトに戻す
sample.loadXML pr.m_InXML.selectSingleNode( _
TypeName( sample ) +"[@name='"+ sample.Name +"']" )
使用サンプル：
子プロセスに、データを受け渡しするときは、new_ParentProcess_Object で生成した
ParentProcess オブジェクトを RunProg に渡します。
new_ParentProcess で生成した ParentProcess オブジェクトには、他の子プロセスと受け渡し
するファイルの名前が重複しない番号が m_FileID に入っています。 複数の子プロセスを
平行して同時に動かすときは、ParentProcess オブジェクトをもう１つ生成してください。
前の子プロセスが終わってから次の子プロセスを動かすときは、同じ ParentProcess
オブジェクトが使えます。
(src)
pr
xml
← ▼ ▲
子プロセス側が使う ChildProcess オブジェクト、get_ChildProcess
vbs_inc モジュールは、vbslib をインクルードする前に自動的に /ChildProcess オプションがあるかどうかを
判定し、あれば ChildProcess オブジェクトを生成します。 ChildProcess オブジェクトは、get_ChildProcess
Dim pr, sample
'// プログラム開始時に、送られてきたXMLファイルをオブジェクトに戻す
Set pr = get_ChildProcess() ' as ParentChildProcess
new_ObjectFromStream sample, "SampleClass", pr
'// main
If not IsEmpty( sample ) Then
sample.Value = 2
End If
'// プログラム終了時に、戻すオブジェクトをXMLファイルに変換する
If not pr is Nothing Then
If not IsEmpty( sample ) Then pr.m_OutFile.WriteLine sample.xml
End If
静的オブジェクト
であり、メインプロセスからの情報を m_InXML から入力し、
関数で取得できる
ChildProcess オブジェクトのメンバー
使用サンプル：
Class ParentChildProcess
Public m_InXML 'as IXMLDOMElement ... メイン・プロセスから渡される ルートXML要素
Public m_OutFile 'as TextStream (Write) ... メイン・プロセスへ戻す XML ファイル
Public m_TempPath ' as string. 送受信ファイルができるフォルダのパス
Public m_DateID ' as string. 例："090401". ファイル名の一部
Public m_FileID ' as string. 例："1". ファイル名の一部
End Class
メインプロセスへ戻す情報を、m_OutFile に出力することができます。
/ChildProcess オプションがないときは、get_ChildProcess 関数が、Nothing オブジェクトを返します。
参考
→ xml プロパティ
→ XPath
(src)
xml
← ▼ ▲
InterProcessData インターフェース（ライブラリ用）
Class InterProcessData '// defined_as_interface
Public Sub OnCallInParent( a_ParentProcess as ParentChildProcess ) : End Sub
Public Sub loadXML( XmlObject as IXMLDOMElement ) : End Sub
Public Sub OnReturnInChild( a_ChildProcess as ParentChildProcess ) : End Sub
Public Sub OnReturnInParent( a_ParentProcess as ParentChildProcess ) : End Sub
End Class
Function new_InterProcessData()
Set new_InterProcessData = new InterProcessData
End Function
→ T_ChildProcess2_include.vbs
テスト
ライブラリが自動的に子プロセスに受け渡しをするオブジェクトに必要なインターフェースです。
Dim g_Sample
Sub InitializeModule_Sample '// vbslib モジュールのグローバル・初期化関数
'// NewChildProcessOnStart の後で
new_ObjectFromStream g_Sample, "SampleClass", get_ChildProcess()
If not IsEmpty( g_Sample ) Then g_InterProcess.m_Data.Add g_Sample
End Sub
→ グローバル変数の初期化、後始末、g_InitializeModule、g_FinalizeModule
→ T_ChildProcess2.vbs
参考
参考
→ T_ChildProcess2_Sub.vbs
'// 子プロセスと送受信するオブジェクトを登録する
Dim sample : Set sample = new SampleClass '// has_interface_of InterProcessData
g_InterProcess.m_Data.Add sample
子プロセスに渡すオブジェクトは、g_InterProcess.m_Data as ArrayClass に登録してください。
子プロセスのライブラリの初期化（vbslib モジュールのグローバル・初期化関数）で、
get_ChildProcess as ParentChildProcess から、new_ObjectFromStream などを使って、
オブジェクトを受け取ってください。 メイン・プロセスに渡すオブジェクトは、
g_InterProcess.m_Data as ArrayClass に登録してください。
参考
→ T_ChildProcess2.vbs
← ▼ ▲
ライブラリのデータを格納後、g_InterProcess のデータを格納直前に、
＋１されます。
g_InterProcess オブジェクト
(src)
Dim g_InterProcess ' as InterProcess
Class InterProcess
Public Property Get ProcessCallID '// as ArrayClass of integer
Public InterProcessUserData '// as string
End Class
メイン・プロセスと子プロセスで共有する変数です。
.ProcessCallID ' as ArrayClass of integer
ProcessCallID(0) = メイン・プロセスが子プロセスを起動した回数。
ProcessCallID(1) = 子プロセスが孫プロセスを起動した回数。
→ 処理フロー (/ChildProcess オプション)
.InterProcessUserData as string
アプリケーション・ユーザーがデバッグ用に使えます
→ [T_ChildProcessID] ProcessCallID や InterProcessUserData
テスト
← ▼ ▲
処理フロー (/ChildProcess オプション)
RunProg
new_ParentProcess
ParentProcess.m_OutFile.WriteLine
AppData.loadXML
Shell::Exec
new_ChildProcess_ifChildProcess
(VBScript global code)
→ 処理フロー （vbs_inc/setting）
main
get_ChildProcess
new_ObjectFromStream
ChildProcess.m_OutFile.WriteLine
:
子プロセスのメイン処理
:
ParentProcess.m_OutFile.WriteLine
アプリケーションからの出力
ライブラリからの出力
ライブラリへの入力
アプリケーションへの入力
アプリケーションからの出力
ResumePop or FinalizeInModulesCaller::Class_Terminate
CallFinalizeInModules
ChildProcess.Finish
ChildProcess.m_OutFile.WriteLine
ライブラリからの出力
ライブラリへの入力
アプリケーションへの入力
参考
If TypeName( ParentProcess ) <> "ParentChildProcess" Then new_ParentProcess
アプリケーションがやり取りするときのみ呼び出す
ParentProcess.OnCallInParent
ParentProcess.OnReturnInParent
ParentProcess.Class_Terminate
受け渡しに使った XML ファイルを削除する
子プロセス起動
子プロセス終了
In.xml
Out.xml
(src)
(src)
(src)
(src)
InterProcessData.OnReturnInChild
InterProcessData.OnCallInParent
InterProcessData.OnReturnInParent
g_InterProcess.OnCallInParent
(src)
InterProcessData.ProcessCallID + 1
ProcessCallID を＋１する
InterProcess.OnCallInSub
Set g_ChildProcess = m
InitializeModule (vbslib.vbs)
new_ObjectFromStream
InitializeModule (vbslib または 任意の.vbs)
ParentProcess.m_OutFile.WriteLine
g_InterProcessからの出力
g_InterProcessへの入力
AppData, ChildProcess
InterProcess.OnReturnInChild
ChildProcess.m_OutFile.WriteLine
(src)
g_InterProcessからの出力
InterProcess.OnReturnInParent
new_ObjectFromStream
InterProcess.loadXML
g_InterProcessへの入力
AppData.xml
ParentProcess
(src)
main
Set g_InterProcess = new InterProcess
InitializeModule (vbslib.vbs)
メイン・プロセス起動
g_InterProcess.InterProcessDataArray.Add
InitializeModule (vbslib.vbs または 任意の.vbs)
LibData
プロセスが変わるときにコールバック
するように登録する
LibData
If WScript.Arguments.Named.Item("ChildProcess") Then
プロセスが変わるときにコールバックするように登録する
LibData
g_InterProcess.m_Data.Add
AppData
(src)
Set m_InXML = LoadXML( "Out.xml" )
Set m_InXML = LoadXML( "In.xml" )
(src)
FinalizeModule [vbslib.vbs]
Err2.OnSuccessFinish
エラー関係の調整
Err2 はここ
← ▼ ▲
困ったときは (/ChildProcess)
受け渡しの内容を確認するには
%Temp%\Report\090401\ChildProcess_1\In.xml
%Temp%\Report\090401\ChildProcess_1\Out.xml
下記の XML ファイルを確認してください。
ただし、ParentProcess オブジェクトが削除されたら、XML ファイルも削除されるので注意してください。
→ 子プロセスへの受け渡し (/ChildProcess オプション)
参考
アプリケーションからデータが送れない
RunProg の第2引数に、ParentProcess オブジェクトを指定しているか確認してください。
← ▼ ▲
GetEditorCmdLine
Function GetEditorCmdLine( PathAndFragment as string ) as string
Setting_getEditorCmdLine
(src)
【引数】
PathAndFragment
返り値
テキストファイルへのパスと行番号またはキーワード
コマンドライン
サンプル：
start GetEditorCmdLine( "File1.txt#[Func1]" )
File1.txt を開いて "[Func1]" を含む行にジャンプします
テキストファイルを開くエディタは、
関数を定義することで変更でき
ます。 Setting_getEditorCmdLine の i=2、i=3 のどちらかに対応すれば、指定の行へジャンプ
できます。 i=0、i=1 のどちらかに対応していれば、ファイルを開くことだけはできます。
関連
GetSearchOpenCmdLine
GetSearchOpenCmdLine は廃止予定です。 GetEditorCmdLine を使ってください。
サンプル：
start GetEditorCmdLine( "File1.txt(10)" )
サンプル：
start GetEditorCmdLine( "File1.txt" )
File1.txt を開きます
File1.txt の10行目を開きます
の設定が反映されます。
テキスト・エディターを起動するコマンドラインを返します。
Setting_getEditorCmdLine
start GetEditorCmdLine( "File1.txt:10" )
start GetEditorCmdLine( "File1.txt:[Func1]" )
Function GetSearchOpenCmdLine( PathAndFragment as string ) as string
参考
→ タグジャンプ - テキストエディタ Apsaly (Web)
PathAndFragment には、タグジャンプ形式の文字列（パス＋行番号、または、パス＋行内容）
を指定できます。 形式については下記のサンプルを参照してください。
→ GetTagJumpParams
キーワードの直前の文字がコロン ( : ) のときは、数字のみのキーワードを指定できません。
返り値に含まれるファイル・パスは、絶対パスになります。
（廃止予定）
→ Setting_openFolder
タグジャンプ形式のパスの解析
フォルダーを開く
（廃止予定）
← ▼ ▲
GetDiffCmdLine, GetDiffCmdLine3
Function GetDiffCmdLine( PathA as string, PathB as string ) as string
(src)
Diff ツールを起動するコマンドラインを返します。
Setting_getDiffCmdLine
の設定が反映されます。
start GetDiffCmdLine( "file1.txt", "file2.txt" )
返り値の例：
"C:\Program Files\Diff.exe" "C:\FileA.txt" "C:\FileB.txt"
Function GetDiffCmdLine3( PathA as string, PathB as string, PathC as string ) as string
start GetDiffCmdLine( "file1.txt(5)", "file2.txt" )
file1.txt の 5行目と、それに対応する file2.txt を表示する
start GetDiffCmdLine3( "file1.txt", "file2.txt", "file3.txt" )
file1.txt、file2.txt、file3.txt を表示する
設定されている Diff ツールが行番号指定に対応していないときは、5行目ではなく先頭の
行を表示します。
設定されている Diff ツールが３つのファイルを同時に比較することができないときは、
３つのファイルのうち、比較する２つのファイルを選択するスクリプト diff3to2.vbs を
起動するコマンドラインを返します。
サンプル
サンプル
サンプル
サンプル
Dim folder_a, folder_b, step_path
folder_a = "C:\folder_a\"
folder_b = "C:\folder_b\"
Do
echo ""
echo "２つのフォルダーの中にあるテキストファイルを Diff で表示します"
echo folder_a
echo folder_b
echo ""
echo "Enter のみ : 終了"
step_path = input( "共通の相対パス >" )
If step_path = "" Then Exit Do
start GetDiffCmdLine( GetAbsPath( step_path, folder_a ), _
GetAbsPath( step_path, folder_b ) )
Loop
相対パスを１つ入力して、Diff を開くプロンプト
← ▼ ▲
Sleep
Sub Sleep( msec as integer )
指定した時間だけ待ちます。
【引数】
msec
待つ時間（ミリ秒）
(src)
Sleep 1000
サンプル：
Dim n : For n = 5 To 1 Step -1 : echo n : Sleep 1000 : Next : echo 0
サンプル：
5秒のカウントダウン
← ▼ ▲
WaitForFile
Function WaitForFile( Path as string ) as string
指定したファイルが作られるまで待ちます。
【引数】
Path
待つファイルのパス
何かの処理（前処理）が終わってから行う処理があるときに使います。
前処理が終わるときに、終わったことを示すファイルを作るようにすれば、
本関数が使えるようになります。
→ CreateFile
(src)
返り値
ファイルの1行目の内容（末尾に改行文字なし）
本関数から抜ける直前で、対象のファイルを削除します。
WaitForFile "Result.txt"
サンプル：
複数のプロセスで通信をするときは、同期に使用するファイルを最終的に
削除する責任を持つ
形にしてください。 そうしないと、同期に使用するファイルを相手に通知する
前に削除してしまう可能性が生まれて、サブ・スレッドが永遠に待ち続ける
ことになってしまいます。
関連
サブ・スレッド （サーバー）
起動
WaitForFile
CreateFile
WaitForFile
CreateFile で終えると
(busy)
delete
待ち続ける...
終了
通信の注意
ホスト側が WaitForFile で待って通信を終える
メイン・スレッド （クライアント）
同期に使うファイルは、2つのスレッド（クライアントとサーバー）で別のファイル名にしてください。
そうしないと、自分が作成（送信）したファイルを待つ（受信する）形になり、待たないことに
なってしまうからです。
送信ファイルを作成する前に、受信したファイルを削除してください。
そうしないと、相手が次の受信ファイルを先に作ってしまい、そのファイルを削除してしまう
からです。 また、前の通信の残りがあるときでも正しく動くように、クライアントは、前の受信
ファイルを削除してから、送信ファイルを作成してください。
→ T_Call_Target.vbs # [T_WaitForFile]
テスト
→ FileT_wait (clib)
エラーを発生させるファイルを作る
WaitForFile で待っているファイルが、XML 形式のテキストで、ルートのタグが <ERROR>
のときは、WaitForFile の内部からエラーを発生させます。
<?xml version="1.0" encoding="Shift_JIS"?>
<ERROR num="3" msg="エラー"/>
作成するファイルの例
上記の場合、Err オブジェクトの内容は、次のようになります。
Assert Err.Number = 3
Assert Err.Description = "<ERROR num=""3"" msg=""エラー""/>"
← ▼ ▲
WaitForProcess
WaitForProcess "notepad.exe"
Sub WaitForProcess( ProcessName as string )
指定したプロセスが終了するまで待ちます。
【引数】
ProcessName
実行ファイル名
ファイル：
テスト
サンプル
→ T_Process.vbs # [T_WaitForProcess]
System.vbs
(src)
← ▼ ▲
EnumProcesses
Function EnumProcesses() as dictionary of ArrayClass of integer
プロセスを一覧します。
【引数】
プロセスの一覧。 実行ファイル名をキーとする PID の配列の辞書
返り値
ファイル：
System.vbs
(src)
サンプル
Dim ps : Set ps = EnumProcesses()
echo ps.Item( "notepad.exe" ) '// ArrayClass of PID
If not ps.Exists( "notepad.exe" ) Then '// ps.Item( "notepad.exe" ).Count = 0 は不可
start "notepad.exe"
ElseIf ps.Item( "notepad.exe" ).Count >= 2 Then
echo "There are 2 processes."
End If
→ tasklist (バッチファイル)
参考
テスト
→ T_Process.vbs # [T_Processes]
←
↓