(for Internet Explorer)
← ▼ ▲
↑
メイン・プロセス側が使う 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
テスト
ライブラリが自動的に子プロセスに受け渡しをするオブジェクトに必要なインターフェースです。
Err2 は、このインターフェースを持っています。
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)
受け渡しの内容を確認するには
%Temp%\Report\090401\ChildProcess_1\In.xml
%Temp%\Report\090401\ChildProcess_1\Out.xml
下記の XML ファイルを確認してください。
ただし、ParentProcess オブジェクトが削除されたら、XML ファイルも削除されるので注意してください。
→ 子プロセスへの受け渡し (/ChildProcess オプション)
参考
アプリケーションからデータが送れない
RunProg の第2引数に、ParentProcess オブジェクトを指定しているか確認してください。
← ▼ ▲
GetCScriptGUI_CommandLine
Function GetCScriptGUI_CommandLine( Parameters as string ) as string
ダブルクリックしたときに、vbslib のコマンド・プロンプトを開くコマンドラインを返します。
【引数】
Parameters
cscript.exe に渡すパラメーター
コマンドライン
返り値
サンプル
command_line = GetCScriptGUI_CommandLine( "sample.vbs" )
Assert command_line = _
"""%windir%\System32\cmd.exe"" /K (""%windir%\SysWOW64\cscript.exe"" sample.vbs)"
Windows のバージョンによって、返り値の内容は変わります。
(src)
環境変数を展開するときは、
→ env
← ▼ ▲
OpenFolder
Sub OpenFolder( in_FolderOrFilePath )
【引数】
in_FolderOrFilePath
フォルダー、またはファイルのパス
フォルダーを開きます。 フォルダーがなければユーザーに処理を選ばせます。
フォルダーを開く処理は、OpenFolder 関数の内部から
Setting_openFolder 関数
を呼び出すことで行います。
in_FolderOrFilePath 引数の親フォルダーがあれば、そのフォルダーを開きます。
親フォルダーがなければ、以下のメニューを開きます。
"C:\Folder\Sub\File.txt" が見つかりません。
1. フォルダーを作る C:\Folder\Sub\File.txt
2. フォルダーを作る C:\Folder\Sub
3. フォルダーを開く C:\Folder
9. 続きを実行する
番号>
ソース
テスト
関連
→ Setting_openFolder
→ vbslib.vbs
→ T_OpenFolder_Manually.vbs
← ▼ ▲
GetEditorCmdLine
Function GetEditorCmdLine( PathAndFragment as string ) as string
Setting_getEditorCmdLine
【引数】
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
タグジャンプ形式のパスの解析
フォルダーを開く
（廃止予定）
ソース
→ T_Path.vbs
テスト
T_GetEditorCmdLine
→ vbslib.vbs
File1.txt を開いて "Func1" を行末に含む行にジャンプします
サンプル：
start GetEditorCmdLine( "File1.txt#Func1${\n}" )
サンプル：
File1.txt を開いて "Func1" を２番目に含む行にジャンプします
start GetEditorCmdLine( "File1.txt#Func1${+2}" )
\n は、C言語の改行の表現と同じです。
${ } は、
の表現と同じです。
${ } 変数
拡張子が pdf で a.pdf#page=2 のように path を指定すると、Internet Explorer で指定した
ページが開きます。（Internet Explorer の設定変更や仕様変更により使えなくなる可能性が
あります。）
${\n}
${+number}
#string
:string
#number
:number
← ▼ ▲
GetDiffCmdLine, GetDiffCmdLine3, GetDiffCmdLine3Ex
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( GetFullPath( step_path, folder_a ), _
GetFullPath( step_path, folder_b ) )
Loop
相対パスを１つ入力して、Diff を開くプロンプト
→ DiffCUI
参考
Setting_getFolderDiffCmdLine
サンプル
start GetDiffCmdLine( "folder1", "folder2" )
ファイルのパスが指定されたときに起動するツールは、
の設定によって
変わります。
フォルダーのパスが指定されたときに起動するツールは、
テキスト ファイルを比較するツールを起動する。
フォルダーを比較するツールを起動する。
Function GetDiffCmdLine3Ex( PathA as string, PathB as string, PathC as string,
in_Option as Empty or DiffCmdLineOptionClass ) as string
DiffCmdLineOptionClass
DiffCmdLineOptionClass
.IsComparing(i)
(i+1) 番目のフォルダーを比較するかどうか。
初期値は True。
3つのパスは指定するけど、そのうち一部だけ比較する
ときは、比較しないフォルダーについて False にします。
boolean
GetDiffCmdLine3Ex 関数
に指定するオプション。
← ▼ ▲
GetDiffStringCmdLine, GetDiffStringCmdLine3
Function GetDiffStringCmdLine( StringA as string, StringB as string )
as DiffCmdLineClass
Diff ツールを起動して、文字列を比較するコマンドラインを返します。
Function GetDiffStringCmdLine3( StringA as string, StringB as string, StringC as string )
as DiffCmdLineClass
GetDiffCmdLine, GetDiffCmdLine3
との違いは、引数が比較する内容の文字列であることです。
start GetDiffStringCmdLine( "ABC", "AxC" )
サンプル
【引数】
StringA
StringB
比較する文字列 A
比較する文字列 B
StringC
比較する文字列 C
コマンドラインの文字列、または、
返り値
サンプル
Set diff_ = GetDiffStringCmdLine( "ABC", "AxC" )
RunProg diff_, ""
Pause
diff_.Remove
Diff ツールを開き、Diff ツールを閉じたら一時的に作成されるファイルを削除する
DiffCmdLineClass
関連
→ AssertString
ソース
→ TestScript.vbs
← ▼ ▲
DiffCmdLineClass
Default Property Get DiffCmdLineClass::CmdLine() as string
Sub DiffCmdLineClass::Remove()
Diff ツールを起動して、文字列を比較するコマンドライン。
比較する文字列が入ったファイルを削除します。
Dim DiffCmdLineClass::PathA as string
Dim DiffCmdLineClass::PathB as string
Dim DiffCmdLineClass::PathC as string
比較する文字列 A が入ったファイルのパス。
比較する文字列 B が入ったファイルのパス。
Empty または、比較する文字列 C が入ったファイルのパス。
ソース
→ TestScript.vbs
参考
→ GetDiffStringCmdLine
← ▼ ▲
GetDiffOneLineCmdLine
ソース
→ TestScript.vbs
Function GetDiffOneLineCmdLine( in_PathAndLineNumA as string, in_PathAndLineNumB as string )
as DiffCmdLineClass
Diff ツールを起動して、指定した行を 1文字ずつ比較するコマンドラインを返します。
【引数】
in_PathAndLineNumA
in_PathAndLineNumB
比較するファイルのパスと行番号、または、比較する文字列
比較するファイルのパスと行番号、または、比較する文字列
返り値
DiffCmdLineClass
コマンドラインの文字列、または、
start GetDiffOneLineCmdLine( "FileA.txt(3)", "FileB.txt(4)" )
サンプル
サンプル
Set diff_ = GetDiffOneLineCmdLine( "FileA.txt(3)", "FileB.txt(4)" )
RunProg diff_, ""
Pause
diff_.Remove
Diff ツールを開き、Diff ツールを閉じたら一時的に作成されるファイルを削除する
テスト
→ T_fc.vbs
T_GetDiffOneLineCmdLine
→ Diff1 コマンド
関連
ファイルの比較ではなく、文字列を比較するときは、要素数１の配列を渡します。
start GetDiffOneLineCmdLine( Array( "Yes, it is." ), Array( "Yes, it was." ) )
サンプル
← ▼ ▲
DiffCUI
Sub DiffCUI( FilePaths as array of string, FileLabels as array of string )
Diff ツールがないときに、コマンドラインだけで使える比較ツール。
【引数】
FilePaths
FileLabels
比較するファイル パスの配列
比較するファイルの役割名の配列
関連
テスト
ソース
→ vbslib.vbs
→ T_SyncFiles.vbs
→ GetDiffCmdLine, GetDiffCmdLine3
テキストエディターで開くファイルのパスをテストでチェックする
Diff ツールで開くファイルのパスをテストでチェックするとき
DiffCUI は、比較しているそれぞれのファイルを開くメニューがあり、
方法と組み合わせれば、Diff ツールで開くファイルのパスをチェックできます。
→ DiffCUI_InCurrentProcess
→ _src\Test\tools\T_SyncFiles\SettingForTest.vbs
参考
1. 差分を調べて、結果をテキスト・エディターで開く
4. 01 のファイルを開く
5. 02 のファイルを開く
*. 03 のファイルは、存在しません
**. コピーする（コピー元(4以上)×10＋コピー先(4以上)
例：45 ＝ 01 → 02
99. 戻る
操作の番号を入力してください >
本関数を呼び出すと、以下のように表示されます。
← ▼ ▲
DiffCUI_InCurrentProcess
InCurrentProcessFunc
start
に
を指定して、
DiffCUI
を呼び出すために経由する関数。
Function DiffCUI_InCurrentProcess( CommandLine as string )
ソース
→ PC_setting_default.vbs
>start \?InCurrentProcessFunc\DiffCUI_InCurrentProcess -i=33 "C:\Folder\01" "C
:\Folder\02" "C:\Folder\03"
-------------------------------------------------------------------------------
1. 差分を調べて、結果をテキスト・エディターで開く
4. 01 のファイルを開く
5. 02 のファイルを開く
*. 03 のファイルは、存在しません
**. コピーする（コピー元(4以上)×10＋コピー先(4以上)
例：45 ＝ 01 → 02
99. 戻る
操作の番号を入力してください >
start に本関数の返り値を指定すると、以下のように表示されます。
← ▼ ▲
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秒のカウントダウン
→ timeout (バッチファイル)
関連
← ▼ ▲
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=""エラー""/>"
→ OnTime (Excel)
←
↓