(for Internet Explorer)
(src)
Sub  get_ObjectsFromFile( GetFuncs as string or Array of Function,
                          InterfaceName as string, out_Objs as Array of Object )
静的オブジェクト・スクリプトファイルをすべて取得して一覧できるようにします。
【引数】
GetFuncs
InterfaceName
スクリプトのパス、または include_objs の out_GetFuncs
Empty または、取得するオブジェクトが持つインターフェース
out_Objs
取得したオブジェクトの配列
  get_ObjectsFromFile  "Lib\*_obj.vbs", "ClassI", m_Objs '// [out] m_Objs
サンプル: インクルードと同時に、静的オブジェクトを取得する
  include_objs  "Lib\*_obj.vbs", Empty, m_CreateFuncs '// [out] m_CreateFuncs
  get_ObjectsFromFile  m_CreateFuncs, "ClassI", m_Objs '// [out] m_Objs
サンプル: インクルードした後で、静的オブジェクトを取得する(ファイルを走査しない)
Sub  get_StaticObjects( InterfaceName, out_Obj )
  If IsEmpty( InterfaceName ) or  InterfaceName = "ClassI" Then
    Set  out_Obj = get_ClassA()
  ElseIf InterfaceName = "ClassI2" Then
    out_Obj = Array( get_ClassA(),  get_ClassB() )
  End If
End Sub
静的オブジェクトを一覧できるようにするには、それぞれのスクリプトで、get_StaticObjects
関数を定義する必要があります。 get_ObjectsFromFile や include_objs は、別のスクリプト
ファイルであれば、同じ関数名でも異なる関数インスタンスになります。
参考
→ T_GetObject.vbs [T_IncludeObjs2] [T_IncludeObjs3]
テスト
Sub  include_objs( Wildcard as string, Flags as Empty, out_GetFuncs as Array of Funcion )
静的オブジェクト・スクリプトファイルをインクルードします。
【引数】
Wildcard
Flags
スクリプトファイルのパス、またはフォルダパス
Empty を指定してください
out_GetFuncs
Empty、または、静的オブジェクトを取得する関数の集合
out_CreateFuncs が Empty ではないときのサンプル
include_objs は、インクルードのみ行います。 オブジェクトの生成は、new で生成するか、
get_ObjectsFromFile で行います。
(src)
サンプル: Lib フォルダをインクルードして、その中で定義された ClassA オブジェクトを生成する。
  include_objs  "Lib\*_obj.vbs", Empty, Empty
  Set obj : Set obj = new ClassA : ErrCheck
→ new_X_array
Flags = Empty かつ out_GetFuncs = Empty なら、include で代用できます。
関連
out_GetFuncs は、静的オブジェクトを取得する関数の集合です。 get_ObjectsFromFile の第1引数
に渡すと、文字列を渡したときより高速に処理します。
→ T_GetObject.vbs [T_IncludeObjs1c]
テスト
→ T_GetObject.vbs [T_IncludeObjs3]
→ T_GetObject.vbs [T_IncludeObjsMulti]
→ T_GetObject.vbs [T_IncludeObjsMulti_NoWild]
→ T_GetObject.vbs [T_IncludeObjsEmptyArray]
Sub  get_DefineInfoObject( in_out_Object as DefineInfoClass, FullPath as string )
単純な DefineInfo オブジェクトを生成します。
参考
DefineInfo オブジェクトに FullPath プロパティしか必要ないときのみ使えます。
他のプロパティがあるときは、
(src)
Dim  g_SrcPath
If IsEmpty( g_SrcPath ) Then  MsgBox "This is vbslib object file." : WScript.Quit
Dim  g_Sample_vbs : get_DefineInfoObject  g_Sample_vbs, g_SrcPath
'// g_Sample_vbs.FullPath
サンプル:
Function  get_NameDelegator( Name as string, TrueName as string,
                             InterfaceName as string ) as InterfaceName_Delegator
指定のインターフェースを持った、正式名オブジェクトに委譲する、静的な一般名オブジェクトを取得します。
【引数】
Name
TrueName
一般名。 取得するオブジェクトの Name プロパティ
正式名。 取得するオブジェクトの委譲先 (*1)
InterfaceName
一般名オブジェクトと正式名〜が共通に持つ、インターフェースの名前 (*2)
(src)
一般名オブジェクト (*3)
返り値
(*2)
(*3)
Name と TrueName の組み合わせが初めてのときは、get_NameDelegator の内部で、
new_(InterfaceName)_Delegator 関数を呼び出して、オブジェクトを生成します。
返り値となるオブジェクトにアクセスすると、Name プロパティとオブジェクトの実体の違いを除けば、
正式名オブジェクトにアクセスします。
(ここでは一般名オブジェクト)を生成することができる、new_(InterfaceName)_Delegator
関数が定義されていること。 参考:new_X
と、(InterfaceName) インターフェースを持ったインスタンス
Class NameDelegator  '// defined_as_interface
  Public  Name
  Public Property Get  TrueName() : TrueName = NameDelegator_getTrueName( Me ) : End Property
  Public  m_Delegate ' as ClassA or ClassB or string(before validated)
  Public Property Get  DefineInfo() : Set DefineInfo = m_Delegate.DefineInfo : End Property
End Class

Const  F_ValidateOnlyDelegate = &h40000000
Dim    g_bNeedValidateDelegate
Function  NameDelegator_getTrueName( m )
Sub       NameDelegator_validate( m, Flags )
Function  NameDelegator_getXML( m )
DefineInfo プロパティは、オプションです。
  Public Property Get  DefineInfo() : Set DefineInfo = m_Delegate.DefineInfo : End Property
テスト
→ T_NameDelegator_vbslib フォルダ
参照
場面Aの関数
Name 以外は
参照
場面Aでの Name
場面Bでの Name
ある1つのインスタンス
TrueName
(正式名)
ClassI_Delegator クラス
(一般名)
場面Bの関数
ClassI
ClassI
ClassB
ClassI
ClassA
Name = "ClassN", TrueName = "ClassA"
Name = "ClassN", TrueName = "ClassB"
一般名で選択
参照
一般名と正式名の関係は、1対多、または、多対1があります。
(*1)
(InterfaceName) インターフェースを持った、静的な正式名オブジェクトを取得することができる
get_(TrueName) 関数が定義されていること。 参考:get_Object
get_NameDelegator 関数は、
ものです。 get_NameDelegator 関数は、get_(一般名) 関数の内部からのみ呼ばれるようにしてください。
の内部で呼ばれる get_(一般名) 関数の実装を支援する
サンプル:
Function  get_GeneralObject()
  Set  get_GeneralObject = get_NameDelegator( "GeneralObject", "TrueName", "InterfaceName" )
End Function

Function  get_TrueName() : ... : End Function
Function  new_InterfaceName_Delegator() : ... : End Function
返り値となる一般名オブジェクトは、Name プロパティと委譲元となるオブジェクトの実体の違いを除けば、
同じ1つの正式名オブジェクトとして扱うことができます。 参考: 下記の図の「ある1つのインスタンス」
(src)
Sub  new_ObjectFromStream( out_Obj as object, ClassName as string, Stream as variant )
ストリームから、オブジェクトを1つ生成します。
【引数】
out_Obj
ClassName
(出力) ストリームから生成した1つのオブジェクト、または Empty
生成するオブジェクトのクラス名 (下記)
Stream
XML ストリーム (下記)
ClassName 引数
XML のタグ名がクラス名に対応します。
XML のタグの中の属性まで一致するデータを元にオブジェクトを生成するときは、
XPath と同様に下記のようにします。
Set xml = LoadXML( "Sample.xml", Empty )
new_ObjectFromStream  obj, "ClassA[@attr='value']", xml
参考
→ XPath の [@name='value'] (属性の値)
<Root><ClassA attr="value" ... /></Root>
VBScript コード
XMLデータ
Stream 引数
の引数に指定できるものを指定できます。
new_X に対応した関数の準備
内部で、new_X を呼び出しています。 new_X を使うのに必要な関数を用意する必要が
あります。 たとえば、ABC クラスなら、new_ABC 関数が必要です。
参考
テスト
→ T_ObjectFromStream フォルダ
(src)
Sub  new_ObjectsFromStream( out_Objs as array of object, ClassName as string, Stream as variant )
ストリームから、オブジェクトをいくつか生成して、配列に格納します。
【引数】
out_Objs
ClassName
(出力) ストリームから生成したオブジェクトが入った配列
生成するオブジェクトのクラス名
Stream
XML ストリーム
1つもオブジェクトを生成しなかったときでも、out_Objs には配列が格納されます。
ClassName, Stream については、
テスト
→ T_ObjectFromStream フォルダ
参考
Function  new_X( Name as string ) as object
文字列で指定した名前のクラスのオブジェクトを生成します。
Function  new_ClassA()
      Set new_ClassA = new ClassA
End Function
機能的には、"new_" + Name の関数を呼び出すだけなので、別途関数を用意する必要があります。
たとえば、Name = "ClassA" なら、new_ClassA の関数が呼ばれます。
(src)
ただし、多くの場合、get_Object の方が適していることが多いので、get_Object を使うことを検討
してください。
サンプル:
Dim  obj : Set obj = new_X( "ClassA" )
Class  NameOnlyClass
  Public  Name
  Public  Delegate
End Class
Name 変数(任意の型の識別値)と、Delegate 変数(指しているオブジェクトなど)の
対応関係を表すクラスです。
(src)
関連
イベントが発生したらコールバックされる関数の集合
参考
イベントが発生したときにコールバックされる関数を登録します。
イベントが発生したときに、登録されているコールバック関数を呼び出します。
Sub  EventResponders::Add( Func as Function, Object as variant )
イベントが発生したときにコールバックされる関数を登録します。
【引数】
Func
Object
コールバックされる関数
Func の第1引数に渡す値
サンプル:
  obj.OnEventX.Add  GetRef( "OnEventX" ), Empty
参考
Sub  EventResponders::Calls( Caller as variant, Args as variant )
イベントが発生したときに使い、登録されているコールバック関数を全て呼び出します。
【引数】
Caller
Args
イベントが発生したオブジェクト
イベントのパラメーター
サンプル:
  Me.OnEventX.Calls  Me, Empty
参考
Function  CreateGuid() as string
GUID を生成します。
2D7E3038-E395-460A-86CC-C8AB3C3D5D54
返り値の例:
(src)
グローバル変数 g_TestModeFlags に、F_NotRandom を設定すると、
テスト・プログラム用に 00000000-0000-0000-0000-000000000000 から順番に
+1 された値が返ります。
g_TypeLib = 0 にすると、再び 1 から順番に値を返します。
Function  KeyClass::IsSame( Key as object ) as boolean
Function  KeyClass::SetKey( Key as object ) as object
キーとなるオブジェクトを登録します。 一度しか登録できません。 返り値は、Key です。
以前登録したキーと同じかどうかを判定します。
サンプル:
Dim  g_AppKey

  Dim  AppKey : Set AppKey = new KeyClass ' for Ident only
  Set  g_AppKey = new KeyClass : g_AppKey.SetKey( AppKey )
  If not g_AppKey.IsSame( AppKey ) Then  Err.Raise 1,,"Invalied AppKey"
以前登録した特定のオブジェクトかどうかを判定します。
KeyClass から特定のオブジェクトを取得することはできないので、グローバルスコープに、
KeyClass オブジェクトを置いても、特定のオブジェクトへの参照を複製することから守ります。
参考
関連
ファイル、またはフォルダが同一かどうかを比較します。
ファイルまたはフォルダを削除します。
src から dst にファイルまたはフォルダをコピーします。
フォルダを作成します。
カレントフォルダを移動します。
src から dst にファイルまたはフォルダを移動します。
フォルダまたはファイルが存在するかどうかを返します。
テキストファイルの中で、指定したキーワードを含む行を返します。
指定のテキストを内容とした、テキストファイルを作成します。
ワイルドカードを展開します。 サブ・フォルダーも検索します。
他にもあります。左のツリーから選択してください。
ファイル名を変更します。
相対パスを返します。
書き込み可能なフォルダの設定オブジェクトを生成します。
書き込み可能なフォルダを設定します。
書き込み可能でない場所にライトしたときの動きを設定します。
スクリプトが想定していない場所にライトしたときの警告
テキストファイルの内容を表示します。
コマンドプロンプト準拠関数
vbslib オリジナル関数
圧縮(zip)ファイルを解凍します。
FileSystemObject を参照するグローバル変数です。
参考
テスト
ファイルを操作する主な関数を下に一覧します。
すべての関数は、左のツリーを展開してください。
テキストファイルを開きます。(リード用)
テキストファイルを開きます。(ライト用)
テキストファイルの内容を変更します。
絶対パスを返します。
テンポラリ・フォルダの中のパスを返します。
サブフォルダのオブジェクトを高速に辞書に列挙します。
指定した名前のファイルをライトするときにブレークさせます。
負荷が高いときに発生する書き込み拒否エラーに対処します。
一部がバイナリになっているテキストファイルを作成します。
CSV 形式の1行を解析して、配列に格納します。
XML ファイル、または XML 形式の文字列を読み込みます。
Sub  cd( Path as string )
カレント・フォルダーを変更します。
(src)
存在しないフォルダを指定すると、E_WIN32_FILE_NOT_FOUND エラーになります。
ファイルのパスを指定すると、E_WIN32_DIRECTORY エラーになります。
関連
  cd  "FolderA"
  t = ReadFile( "File.txt" )
テスト
→ T_cd_do.vbs # cd
  cd  g_start_in_path
参考
カレント・フォルダーの中にある FolderA フォルダーに、カレント・フォルダー
を変更します。 File.txt は、FolderA フォルダーにあるファイルになります。
現在のカレント・フォルダーを、プロセス起動時のカレント・フォルダーに
変更します。
main 関数、または main2 関数を呼ばれたときのカレント・フォルダーは、プロセス起動時
のカレント・フォルダーではなく、メイン.vbs ファイルがあるフォルダーになります。
メイン.vbs ファイルがあるフォルダーからの相対パスを指定するときは、cd 関数を呼び
出す必要はありません。 (この仕様は、vbslib4 から)
【引数】
Path
新しいカレント・フォルダーのパス
"FolderA"
サンプル
サンプル
ファイル:
vbslib.vbs
Sub  funcA()
  Dim  ds_:Set ds_= new CurDirStack

  cd  "sub"
End Sub  '// 元のフォルダに戻る
オブジェクトが破棄されるタイミングで、カレント・フォルダーを元に戻すオブジェクトです。
下記の場合、関数 funcA から返ると、CurDirStack オブジェクトのデストラクタで、関数に
入ったときのカレント・フォルダーに戻ります。
関連
(src)
テスト
→ T_cd_do.vbs # CurDirStack
サンプル
ファイル:
vbslib.vbs
Sub  pushd( dir as string )
カレントフォルダを移動します。 ただし、popd で戻れるようにします。
(src)
テスト
→ T_cd_do.vbs # pushd
pushd  "FolderA"
popd  '// 元のフォルダに戻る
サンプル
ファイル:
vbslib.vbs
関連
Sub  popd()
カレントフォルダを pushd する前に戻します。
(src)
テスト
→ T_cd_do.vbs # popd
pushd  "FolderA"
popd  '// 元のフォルダに戻る
サンプル
ファイル:
vbslib.vbs
関連
Sub  cd_UpperCaseDrive()
カレント・フォルダーのドライブの文字を大文字に変更します。
サンプル
cd  "c:\Folder"
cd_UpperCaseDrive
Assert  g_sh.CurrentDirectory = "C:\Folder"
→ vbslib.vbs [cd_UpperCaseDrive]
テスト
→ T_cd_do.vbs # [T_cd_UpperCaseDrive]
ソース
SrcPath のファイルまたはフォルダを、DstFolderPath フォルダーの中にコピーします。
Sub  copy( SrcPath as string, DstFolderPath as string )
→ ファイルコピーの引数 (FileSystemObject の場合)
copy 関数は、ファイルやフォルダの有無によって動きが変わらないようにするため、コマンド
プロンプトの copy や FileSystemObject の CopyFile 関数と、若干動きが異なります。
しかし、エクスプローラーなどの一般的なファイラーの動きと同じです。
DstFolderPath 引数
SrcPath 引数
a.txt ファイル
動作
C:\dst_folder
a.txt を dst_folder にコピーします
(dst_folderがフォルダのとき)
C:\dst_folder\a.txt
a.txt フォルダーを作成して、その中に a.txt を
コピーします
フォルダ aa を作成して、aa フォルダの中に
aa フォルダをコピーします
C:\dst_folder\aa
フォルダ aa を dst_folder の中にコピーします
C:\dst_folder
aa フォルダー
C:\dst_folder\bb
ワイルドカード
ファイルとフォルダを dst_folder にコピーします
C:\dst_folder
C:\dst_folder\bb
フォルダ bb を作成して、その中へファイルと
フォルダをコピーします。
フォルダ bb を作成して、bb フォルダの中に
aa フォルダをコピーします
【引数】
SrcPath
DstFolderPath
コピー元のファイルパス、またはフォルダーパス
コピー先のフォルダーパス (ファイルパスは不可)
copy  "src", "dst"
copy  "src\*", "dst"
サンプル
src フォルダーの内容を dst フォルダーの中にコピーします
→ vbslib.vbs
エラー
SrcPath に指定したファイルが見つからない
DstFolderPath がロックされているか、ファイルが存在する
E_WriteAccessDenied
src フォルダーを dst フォルダーの中にコピーします
→ T_Copy.vbs # [T_Copy]
テスト
vbslib3 の copy の DstFolderPath に指定したパスがフォルダーではないときは、ファイル名を
変える動きでしたが、vbslib4 の copy では、必ず DstFolderPath の新規フォルダーを作成して、
その中へコピーします。 これは、エクスプローラーなどの一般的なファイラーの動きと同じです。
コピーと同時にファイル名を変える時は、copy_ren を使ってください。
g_Vers("CopyTargetIsFileOrFolder") = 1
vbslib ver3 との違い
参考
関連
参考
ファイル:
vbslib.vbs
src\*
コピー先にファイルがあっても、上書き確認をユーザーに行わずに、上書きします。
ユーザーには、上書きするフォルダーやファイルのバックアップをとるようにガイドしてください。
フォルダーをコピーするとき、SrcPath のフォルダーと DstFolderPath のフォルダーを全く同じ
ファイル構成にしたいときは、DstFolderPath のフォルダーを削除してからコピーしてください。
そうしなければ、DstFolderPath の中にあるファイルと同じ場所にあるファイルが SrcPath の
中にに無くても、そのファイルは無くならないためです。 これは、エクスプローラーなどの一般的
なファイラーの動きと同じです。
Src
FileA.txt
コピー元のフォルダー
コピーする前のコピー先
FileB.txt
Dst
FileA.txt
コピーした後のコピー先
Dst
FileB.txt
vbslib ver3 の copy やコマンドプロンプトの copy と動きが異なる場合があります。(下記)
vbslib3 で作成したスクリプトをそのまま動かすと、DstFolderPath にファイルパスを指定した
copy は、指定したファイル名と同じ名前のフォルダの中にコピーするようになります。 しかし、
そのまま、実行を続けても、開こうとするファイルがフォルダーであるため開けない、というエラー
でブレークするため、大きな問題にはならないでしょう。 また、ファイルには一般に拡張子が
付いているので、vbslib3 で作成した copy を vbslib4 で動かすと、拡張子が付いたフォルダー
が作られます。拡張子が付いたフォルダーがあれば、copy の移植を検討してください。

vbslib3 の仕様に戻したいときは、下記のように設定してから copy を呼び出してください。
仕様を変更した理由は、copy する前の DstFolderPath がフォルダーであるかないかによって、
コピー先が変わらないようにするためです。 (あるかないかを判定する If 文が不要になります)
ソース
→ vbslib_mini.vbs