(for Internet Explorer)
← ▼ ▲
↑
SetXmlAttribute
Function SetXmlAttribute( BaseXmlElement as IXMLDOMElement, XPathForXmlElement as string,
AttrName as string, AttrValue as string ) as boolean
XML 属性の値を変更します。
【引数】
BaseXmlElement
XPathForXmlElement
XPathForXmlElement の基準となる XML要素（タグ）
属性を変更する XML 要素（タグ） への XPath または Empty
返り値
変更後の XML 属性の値、""=値なし、Empty=属性を削除する
AttrValue
変化があったかどうか
(src)
サンプル：
→ setAttribute (IXMLDOMElement)
参考
Dim b, is_change
Dim root : Set root = LoadXML( "in.xml", Empty ) '// as IXMLDOMElement
b= SetXmlAttribute( root, "./Tag1", "attr1", "1234" )
is_change = is_change or b
If is_change Then root.ownerDocument.save "out.xml"
1234
attr1
Tag1
SetXmlAttribute
テスト
→ T_XML.vbs # T_SetXmlAttribute
XML 属性の名前
AttrName
XPathForXmlElement に該当する XML 要素が複数あったときは、すべての XML 要素の属性を変更
します。
XPathForXmlElement に該当する XML 要素が無かったときは、XML 要素を追加します。
→ RegWrite
廃止されました。
→ XmlWrite
← ▼ ▲
XmlRead
Function XmlRead( BaseXmlElement as IXMLDOMElement, XPath as string ) as string
XML のタグの間のテキスト、または XML の属性の値を変更します。
【引数】
BaseXmlElement
XPath
XPath の基準となる XML要素（タグ）
タグの間のテキスト、または XML の属性の位置を表す XPath
返り値
(src)
テキストまたは XML 属性の値。文字列型
タグの間のテキストは、厳密には XPath = "/Root/Elem/text()" ですが、XPath = "/Root/Elem"
を指定してください。
XPath に指定したタグ（XML要素）やXML属性が存在しないときは、Empty を返します。
参考
テスト
→ T_XML.vbs # [T_XmlRead]
→ getAttribute (IXMLDOMElement)
→ RegRead
サンプル
Dim root : Set root = LoadXML( "in.xml", Empty ) '// as IXMLDOMElement
value = XmlRead( root, "./Tag1/@attr1" )
Tag1/@attr1
XmlRead
← ▼ ▲
GetXmlAttribute
Function GetXmlAttribute( BaseXmlElement, XPathForXmlElement, AttrName )
XML 属性の値を返します。
【引数】
BaseXmlElement
XPathForXmlElement
XPathForXmlElement の基準となる XML要素（タグ）
属性を変更する XML 要素（タグ） への XPath または Empty
返り値
XML 属性の値、文字列型のみ、Empty=属性なし
XML 属性の名前
AttrName
(src)
サンプル：
参考
Dim root : Set root = LoadXML( "in.xml", Empty ) ' as IXMLDOMElement
value = GetXmlAttribute( root, "./Tag1", "attr1" )
attr1
Tag1
GetXmlAttribute
テスト
→ T_XML.vbs # [T_GetXmlAttribute]
→ getAttribute (IXMLDOMElement)
→ RegRead
廃止されました。
→ XmlRead
← ▼ ▲
XmlSelect
書きかけ
テスト
→ T_XML.vbs # T_XmlSelect
Function XmlSelect( BaseXmlElement as IXMLDOMElement, XPath as string ) as IXMLDOMElement
XML のタグのハンドルを返します。 もし、該当する XML のタグが無ければ生成して返します。
【引数】
BaseXmlElement
XPath
XPathForXmlElement の基準となる XML要素（タグ）
XML 要素（タグ）の位置を表す XPath
返り値
XML 要素（タグ）
← ▼ ▲
XmlWriteEncoding
(src)
Sub XmlWriteEncoding( RootXmlElement as IXMLDOMElement, CharSet as string )
XML ファイルの文字コードを指定します。
【引数】
BaseXmlElement
CharSet
ルートの XML要素（タグ）
文字コード
→ new_TextFileCharSetStack
テスト
→ T_XML.vbs # T_XmlWrite
← ▼ ▲
XmlAttrDic
Function XmlAttrDic( XmlElem as IXMLDOMElement ) as dictionary of string
XML 要素（タグ）の属性を、辞書にします。
【引数】
XmlElem
XML 要素
キーが属性名、アイテムが属性値の辞書
vbslib
モジュール・シンボル：
返り値
→ T_XML.vbs # [T_XmlAttrDic]
テスト
(src)
← ▼ ▲
GetXPath
Function GetXPath( DOMObject as IXMLDOMElement, ShowAttrs as string ) as string
XML の DOM オブジェクトがある場所を表す XPath を返します。
【引数】
DOMObject
IXMLDOMElement または IXMLDOMAttribute
Empty、または、XPath に含める XML 属性、またはその配列
ShowAttrs
(src)
DOMObject が IXMLDOMAttribute のときは、ルート XML 要素からのパスは含まれません。
サンプル
Dim node
Dim root : Set root = LoadXML( "sample.xml", Empty ) ' as IXMLDOMElement
'// GetXPath( root, Empty ) = "/Root"
node = root.selectNodes( "/Root/Test1", Empty )
'// GetXPath( node(0) ) = "/Root/Test1"
node = root.selectNodes( "/Root/Test2/@id", Empty )
'// GetXPath( node(0) ) = "@id"
node = root.selectNodes( "/Root/Test2[@id='1']/Sub", Array("id","attr") )
'// GetXPath( node(0) ) = "/Root/Test2[@id='1' and @attr='a']/Sub"
テスト
→ T_XML.vbs # [T_XPath]
XPath
返り値
参考
→ XPath
← ▼ ▲
ChangeToXml
Function ChangeToXml( XML as string or object ) as IXMLDOMElement
XML 文字列などを、XML 要素オブジェクトに変換します。
IXMLDOMElement
→ loadXML メソッド (vbsool)
参考
(src)
・XML が記述された文字列
LoadXML
などで取得した
IXMLDOMElement
引数に指定できるものは、次のものがあります。
・
・ParentProcess や ChildProcess
→ /ChildProcess オプション
XML ファイルをロードする
← ▼ ▲
GetHRefBase
Dim base, x
Set base = GetHRefBase( "sample.xml", Array("X") )
Set x = base.href( "target.xml#name1" )
Assert x.getAttribute( "name" ) = "name1"
sample.xml
<Root>
<A href="target.xml#name1">Link</A>
</Root>
target.xml
<Root>
<X name="name1"/>
</Root>
Function GetHRefBase( BasePath as string, TargetTagNames as array of string ) as HRefBase
HTML の A href のようなリンクを取得するためのオブジェクトを返します。
【引数】
BasePath
基準となる XML ファイルのパス
TargetTagNames
リンク先となる id, name 属性を持つタグの名前の配列
リンクを取得するためのオブジェクト
返り値
サンプル
href
関連
→ href (HRefBase)
"sample.xml"
"target.xml#name1"
"target.xml#name1"
→ LinkedXMLs クラス
循環参照検出あり
テスト
→ T_XML.vbs # [T_HRefBase]
(src)
"X"
← ▼ ▲
href (HRefBase)
Function HRefBase::href( URL as string ) as IXMLDOMElement
HTML の A href のようなリンクのリンク先となる XML タグを取得します。
【引数】
URL
リンク先のURL
リンク先の XML タグ
返り値
参考
→ GetHRefBase
他の XML ファイルへのリンクがあるときは、内部で自動的に LoadXML が呼ばれます。
(src)
HRefBase オブジェクトの取得
→ GetLinkTargetNode (LinkedXMLs)
パスにピリオドを３つ並べる
こともできます。
リンク先が見つからないときはエラーになります。
IXMLDOMElement
関連
→ getElementById (HTMLDocument)
← ▼ ▲
LinkedXMLs クラス
データ構造
.XmlTagNamesHavingIdName as array of string
.SourceXmlPath as string
.SourceXmlRootElem as IXMLDOMElement
.TargetXmlPath as string
.TargetXmlRootElem as IXMLDOMElement
リンク元の XML ファイルのパス
SourceXmlPath のルート XML タグ
リンク先の XML ファイルのパス
TargetXmlPath のルート XML タグ
リンク先になれるタグ名の配列
HTML の A href のようなリンクのリンク先となる XML タグを取得します。
他の XML ファイルへのリンクがあるときは、内部で自動的に LoadXML が呼ばれます。
リンク先のリンク先が、循環参照しているかどうかを検出することもできます。
Dim root, a, x
Set root = LoadXML( "sample.xml", Empty )
Set a = root.selectSingleNode( "./A" ) '// A タグ
Dim linker : Set linker = new LinkedXMLs
linker.XmlTagNamesHavingIdName = Array( "X" )
linker.StartNavigation "sample.xml", root
Set x = linker.GetLinkTargetNode( "target.xml#name1" ) '// X タグ
linker.EndNavigation
sample.xml
スクリプト
<Root>
<A href="target.xml#name1">Link</A>
</Root>
target.xml
<Root>
<X name="name1"/>
</Root>
"sample.xml"
"X"
"target.xml#name1"
"sample.xml"
他の XML ファイルへのリンクがあるときは、内部で LoadXML が呼ばれ、返される XML
ルートタグは、内部にキャッシュされます。 最新の情報に更新するとき（キャッシュを
クリアするとき）は、LinkedXMLs オブジェクトを再生成してください。
(src)
GetLinkTargetNode
EndNavigation
StartNavigation
XmlTagNamesHavingIdName
← ▼ ▲
XmlTagNamesHavingIdName (LinkedXMLs)
getLinkTargetNode メソッドでリンク先にできる XML のid 属性や name 属性を持つ XML タグ名の配列。
Set linker = new LinkedXMLs
linker.XmlTagNamesHavingIdName = Array( "TestCases", "TestCase", "SubCase" )
サンプル
<A href="#name1">1</A> <A href="#name2">2</A> <A href="#name3">3</A>
<TestCases id="name1"/> <TestCase name="name2"/> <Others id="name3"/>
XmlTagNamesHavingIdName に指定した名前を持つタグにリンクすることができます。
下記の A href のうち、name1, name2 はリンク先が見つかりますが、name3 は見つかりません。
Dim LinkedXMLs::XmlTagNamesHavingIdName as string
"TestCases", "TestCase", "SubCase"
← ▼ ▲
StartNavigation (LinkedXMLs)
Sub LinkedXMLs::StartNavigation( SourceXmlPath as string, SourceXmlRootElem as IXMLDOMElement )
(src)
現在の XML ファイルの情報を指定します。
【引数】
SourceXmlPath
SourceXmlRootElem
現在の XML ファイルのパス。相対パスでも可能
SourceXmlPath のファイルのルート XML タグ (下記)
SourceXmlRootElem 引数
初めてリンク先を探すときは、LoadXML の返り値を指定します。
リンク先の更にリンク先を探すときは、LinkedXMLs::TargetXmlRootElem を指定します。
← ▼ ▲
EndNavigation (LinkedXMLs)
(src)
Sub LinkedXMLs::EndNavigation()
StartNavigation
で指定した現在の XML ファイルの終了を指定します。
← ▼ ▲
GetLinkTargetNode (LinkedXMLs)
(src)
Function LinkedXMLs::GetLinkTargetNode( TargetLocation as string ) as IXMLDOMElement
リンク先となる XML タグを取得します。
【引数】
TargetLocation
返り値
リンク先のパス。 target.xml#name 形式
リンク先のタグ
本関数が成功すると、Me.TargetXmlPath（リンク先の XML ファイルのパス）と、
Me.TargetXmlRootElem （TargetXmlPath のルート XML タグ）も更新されます。
StartNavigation をネストしていくと、GetLinkTargetNode で、循環参照エラーを検出できます。
linker.StartNavigation "sample.xml", root
Set a = linker.GetLinkTargetNode( "#a" )
linker.StartNavigation linker.TargetXmlPath, linker.TargetXmlRootElem
Set b = linker.GetLinkTargetNode( "#b" )
linker.StartNavigation linker.TargetXmlPath, linker.TargetXmlRootElem
Set a2 = linker.GetLinkTargetNode( "#a" ) '// 循環参照エラー
linker.EndNavigation
linker.EndNavigation
linker.EndNavigation
linker.StartNavigation "sample.xml", root
Set b = linker.GetLinkTargetNode( "#b" ) '// 循環参照エラーにならない
linker.EndNavigation
循環参照エラーの検出
linker.StartNavigation "sample.xml", root
Set x = linker.GetLinkTargetNode( "target.xml#name1" )
linker.EndNavigation
サンプル
"target.xml#name1"
参考
→ href (HRefBase)
IXMLDOMElement
← ▼ ▲
関連
→ BinaryArray クラス
バイナリ・ファイル
→ OpenForRegFile
レジストリ・ファイル
→ StringStream クラス
文字列 TextStream
← ▼ ▲
プロセス制御と include
→ call_vbs
指定した VBScript ファイルの中の関数を呼び出し、終了するまで待ちます。
→ include
クラス定義や関数定義が入った VBSファイルをインクルードします。
→ IsDefined
指定したシンボルの関数が定義されているかどうかを返します。
現在のプロセスのまま
→ ArgumentExist
コマンドライン・オプションが指定されているかどうかを返す
→ env
環境変数を展開します
→ start
指定したコマンドラインを新プロセスで実行します。 終了を待ちません。
→ RunProg
指定したコマンドラインを新プロセスで実行します。 終了を待ちます。
→ Sleep
指定した時間だけ待ちます。
→ WaitForFile
指定したファイルが作られるまで待ちます。
新プロセス
待ち
[ テスト ]
→ エラー発生時の動作
→ 正常終了時の動作
→ プログラム起動 (VBS)
→ バージョン判定、環境変数
関連
→ g_debug_params
→ sudo
管理者権限を持った新プロセスで実行します。 終了を待ちます。
← ▼ ▲
start
Sub start( cmdline as string )
指定したコマンドラインを新プロセスで実行します。 終了を待ちません。
cmdline に環境変数を含めることができます。 （%var% 形式）
start """%ProgramFiles%\Movie Maker\moviemk.exe"""
サンプル：
(src)
cmdline にフォルダやデータファイルのパスを指定すると、そのフォルダやファイルを
ダブルクリックしたときと同じように開きます。
コマンドラインではパスをダブルクォーテーションで囲むこと
ファイルが見つからないと、E_WIN32_FILE_NOT_FOUND エラーになります
→ IShellDispatch2::ShellExecute
関連
Dim cmd
cmd = Setting_getEditorCmdLine( 1 )
cmd = Replace( cmd, "%1", "C:\file.txt" )
start cmd
サンプル：
Setting_getEditorCmdLine
CPU がマルチコアであれば、複数のプロセスによる並列処理になり高速になります。
→ T_Start_Manual.vbs # [T_StartErr]
テスト
start で実行した内容のログを取る
start "cmd.exe /C cscript //nologo sample.vbs | "+ g_vbslib_ver_folder +_
"safetee\safetee.exe -o Sample_out.txt & exit"
safetee
cmd.exe /C を経由して実行してください。 > でリダイレクトすると内容が表示されない
ので、パイプを経由して safetee（または tee）を実行してください。 また、パイプを
使う場合、実行後にウィンドウが残らないように、exit してください。
← ▼ ▲
RunProg
Function RunProg( cmdline as string, stdout_stderr_redirect as string ) as integer
指定したコマンドラインを新プロセスで実行します。 終了を待ちます。
【引数】
cmdline
stdout_stderr_redirect
コマンドライン（実行ファイルパス＋パラメータ）
出力先のファイルパス(下記)
返り値
エラーレベル（main 関数の返り値）
Empty や "" のときは、標準出力へ出力します。（コマンドプロンプト・ウィンドウが開きます）
"_debug" のときは、標準出力へ出力し、ウィンドウを閉じません。
"nul" のときは、出力内容を破棄します。
一般的なシェルと異なり、リダイレクトしても標準出力へも出力されます。
g_VBS_Lib.NotEchoStartCommand を指定したときは、RunProg 自体の echo 出力は
しなくなりますが、RunProg から実行するプログラムは、echo 出力されます。
stdout_stderr_redirect 引数
→ CheckTestErrLevel
コマンド・プロンプトで使えるコマンドを実行するときは、次のようにしてください。
RunProg "cmd /c (dir > files.txt)", ""
RunProg "cmd /c (cd sub & dir > ..\files.txt)", ""
複数のコマンドを実行するときは、& をつけてください。
(src)
プロセスが終了するまで、関数内部で待ちます。
VBScript を実行するときは、cscript を経由してください。
vbslib の input などを使っているときは、/GUI_input:1 または /set_input を指定してください。
RunProg "cscript //nologo sample.vbs /GUI_input:1", ""
新プロセスのカレントフォルダは、RunProg を呼び出す直前のカレントフォルダになります。
コマンドプロンプトから標準入力するプログラムは、停止してしまいます。
→ Shell::Exec (VBS)
対策
RunProg "batch1.bat", ""
バッチファイルを実行するときは、次のようにしてください。
（pause など、標準入力するコマンドを使わないようにしてください）
→ T_Call\TryExec.vbs
実証コード
→ input (vbslib)
RunProg "batch1.bat /close", ""
閉じないバッチファイルは、閉じるようにする
→ コマンドプロンプトを自動的に閉じないバッチファイル
参考
→ call_vbs や include を相対パスで指定するときの注意
→ エラー発生時の動作
→ 正常終了時の動作
g_ChildHead
Dim g_ChildHead as string
新プロセスが標準出力へ出力する内容を表示するときに、行頭に追加する文字列。
デフォルトは、何も追加しません。
グローバル変数です。
→ CheckTestErrLevel
VBScript をデバッガに接続するときは、下記のように //x を付けてください。
RunProg "cscript //x sample.vbs", ""
関連
→ RunProg (clib)
→ T_Call_Target.vbs
テスト
→ T_DebugVBS_Manual.vbs
関連
→ sudo （管理者として起動）
→ 子プロセスへの受け渡し (/ChildProcess オプション)
複数のコマンドをバッチファイルのように記述するときは
→ RunBat
RunProg したプロセスAが、子プロセスBを生成したとき、プロセスAが終了しても、プロセスB
が終了していなければ、RunProg から戻りません。
← ▼ ▲
RunBat
Function RunBat( cmdlines as string, stdout_stderr_redirect as string ) as integer
指定したバッチを新プロセスで実行します。 終了を待ちます。
【引数】
cmdlines
バッチファイルに記述する内容
出力先のファイルパス, "" または Empty で標準出力のみ
返り値
エラーレベル
(src)
stdout_stderr_redirect
サンプル：
r= RunBat( _
"nmake -f makefile" +vbCRLF+_
"@if errorlevel 1 goto fin" +vbCRLF+_
"del *.obj" +vbCRLF+_
":fin", _
Empty )
If r <> 0 Then Raise 1, "<ERROR msg='バッチ処理でエラーが発生しました'/>"
If not exist( "sample.dll" ) Then Fail
← ▼ ▲
sudo
Function sudo( OperationName as string, CmdLine as string,
StdoutStderrRedirect as string ) as integer
指定したコマンドラインを管理者権限を持った新プロセスで実行します。 終了を待ちます。
【引数】
CmdLine
StdoutStderrRedirect
コマンドライン（実行ファイルパス＋パラメータ）
出力先のファイルパス
返り値
エラーレベル（main 関数の返り値）
→ g_admin
関連
Windows XP では、管理者へログインする設定にすると、起動時に管理者のパスワードを
入力するようになります。 自分が管理者であるときは、入力を求められません。
Windows Vista/7 では、起動する直前に、下記のメッセージを出力します。 更にユーザー
アクセス制御（UAC）による管理者への昇格の許可も求められます。 ユーザーが心配
しないよう、OperationName 引数に、行おうとする処理の名前を的確に指定してください。
-------------------------------------------------------------------------------
[ UAC（ユーザーアカウント制御）予告（詳細） ]
詳細情報１：
"C:\home\InstallSample.vbs"
詳細情報２：
C:\home>
cscript CopyProgram.vbs
-------------------------------------------------------------------------------
[ UAC（ユーザーアカウント制御）予告 ]
『Sample アプリケーションのインストール』という処理の続きを "管理者権限ランチャー
(sudo.exe)"から実行します。
これが、あなたがしようとしている処理と異なるときや、あいまいな処理名のときは、
終了してください。
続行するには Enter キーを押してください . . .
↓
→ T_sudo フォルダ
テスト
If GetOSVersion() >= 6.0 Then
未対応
(src)
未対応
Enter キーを押すと
sudo が出すメッセージ (実行前)
sudo "Sample アプリケーションのインストール", _
"cscript CopyProgram.vbs", ""
未対応
sudo が出すメッセージ (実行後)
↓
「はい」 をクリックすると
管理者権限で行う処理が完了し、管理者権限は失効しました。
sudo に指定したプログラム、cscript CopyProgram.vbs を、新規プロセスで起動
↓
プログラムが終了したら
サンプルコード：
内部コールツリー
sudo (vbs)
sudo.exe
"cscript T_sudo_c_target.vbs"
T_sudo_c_Manual.vbs
cmd /C
T_sudo_c_target.vbs
if not ""%errorlevel%""==""21"" pause
親プロセス、一般ユーザー
cmd /C "temporary.bat"
"temporary.bat"
子プロセス、管理者
孫プロセス、管理者
ひ孫プロセス、管理者
echo %errorlevel% > errorlevel.txt
エラー時に pause する
T_sudo_c_target.vbs
wscript
cscript
玄孫プロセス、管理者
OperationName
ユーザーが行おうとしている処理の名前
2秒間表示されます。
通常時
デバッガ使用時
親プロセス、一般ユーザー
"cscript //x T_sudo_c_target.vbs"
sudo (vbs)
T_sudo_c_Manual.vbs
sudo.exe
cmd /C "cscript //x ***.vbs" /debug:1
子プロセス、管理者
***.vbs
cscript
孫プロセス、管理者、デバッガ接続
sudo で起動する .vbs スクリプトのプロセスをデバッグするときは、CmdLine 引数に、
cscript のオプション //x を付けてください。
Windows XP の場合
Windows Vista/7 の場合
デバッガに接続するには
sudo "Sample アプリケーションのインストール", _
"cscript //x CopyProgram.vbs", ""
←
↓