←
▼
▲
ソースファイルからHTML形式のドキュメントを生成します。
より制御文字が自然で読みやすくなります。
doxygen
": "+ キーワードで検索することで、定義だけに絞り込んで、検索できるようになります。
vbslib の
で、使用していないセクションを削除できます。
主に、コメントの中の Keyword: (キーワードとコロン) を手掛かりに解析します。
'***********************************************************************
'* Function: SampleFunction
'***********************************************************************
… 関数に関するドキュメントとして抽出します。
も必要です。
インストール
perl
動かし方
書き方
参考
→ Natural Docs
サンプル
→ Samples\NaturalDocsSample.vbs
←
▼
▲
'***********************************************************************
'* File: Sample.vbs
'* 説明
'*
'* - $Rev: $
'* - $Date:: $
'*
'*
'* Call tree:
'* - <Main>
'* - | <SampleFunction>
'* - | | <SubSub>
'*
'* Data structure:
'* - <SampleClass>
'* - | <ChildClass> .Child
'* - | | <GrandChildClass> .GrandChild
'* - | | | <ListClass> < <ElementClass> > .Elements
'***********************************************************************
←
▼
▲
'***********************************************************************
'* Function: SampleFunction
'* UTF-8 形式なら、日本語も書けます。(vbslib 版では Shift-JIS か BOM 付き各種 Unicode)
'*
'* Arguments:
'* in_Source - Source as <char*>.
'* out_Destination - Destination as <char*>.
'*
'* Return Value:
'* Error Code. 0=No Error.
'*
'* Example:
'* > '// Case of ...
'* > Assert object.SampleFunction( "src.txt", "dst.txt" ) = "src_dst.txt"
'*
'* Description:
'* The output from <SampleFunction>.
'*
'* Name Space:
'* SampleClass::SampleFunction
'***********************************************************************
Function SampleFunction( in_Source, out_Destination )
End Function
/* の後の <Keyword>: が、検出対象になります。
<Keyword>: の次の行は、説明文になります。
Function の左に * が無いと、/** ではダメです。 /**//* もダメです。
: の前に空白を入れることはできません。
2つ目以降の <SubKeyword>: の <SubKeyword> は、自由に付けられます。
- を付けると、識別子 - 説明 になります。
<SubKeyword>: の後は改行が必要です。
<SubKeyword>: の前の行に空行(*はあってもよい)が必要です。
ヘッダーに完全なコメントを書くとき、ソースには以下のようにすると、
識別子が重複することがなくなります。 Implement: は、NaturalDocs では
無視します。
'***********************************************************************
'* Implement: SampleFunction
'***********************************************************************
'* Group: Colors
複数の関数に対してグループ名を付けることができます。
Example:
サンプルは概念を理解するのに最も重要です。 具体的な例となる値を書いてください。
'***********************************************************************
'* Function: SampleFunction
'***********************************************************************
←
▼
▲
'***********************************************************************
'* Class: SampleClass
'* This is a SampleClass. This line can be deleted.
'***********************************************************************
Class SampleClass
'* Var: Duration_msec
'* See "TimerClass".
Public Duration_msec
'* Var: Reserved
Public Reserved
'--------------------------------------------------------
'* Group: Colors
'* Var: m_Color
Private m_Color
'***********************************************************************
'* Method: Open
'*
'* Name Space:
'* SampleClass::Open
'***********************************************************************
Public Sub Open()
End Sub
'***********************************************************************
'* Property: Title
'*
'* Name Space:
'* SampleClass::Title
'***********************************************************************
Public Property Get Title()
Title = ""
End Property
'* Section: End_of_Class
End Class
Var の直後は、変数名。 ただし、検索対象ではない。
説明を書くときは、次の行に書くこと。 説明の行は、なくてもよい。
Class のスコープを終了するときは、以下のように記述します。
'* Section: Global
←
▼
▲
'***********************************************************************
'* Constants: SampleConstants
'* SampleConstants
'*
'* : SymbolA - 0
'* : SymbolB - 1
'***********************************************************************
Const SymbolA = 0
Const SymbolB = 1
←
▼
▲
'***********************************************************************
'* Variable: g_GlobalVariable
'***********************************************************************
Dim g_GlobalVariable
Set g_GlobalVariable = new SampleClass
←
▼
▲
VBSReference1
VBSReference2
Lesson1 もっとも簡単なプログラムを書いてみよう
Lesson2 プロパティ・メソッド・オブジェクトの意味を理解しよう
Lesson3 If文と式の評価について
Lesson4 For文と配列について
Lesson5 その他のフロー制御構文
Lesson6 サブルーチン-SubプロシージャとFunctionプロシージャ-
Lesson7 エラー処理の基礎
Lesson8 基礎編のまとめ
Lesson9 アプリの起動とレジストリ
WScriptのオブジェクト1 -WshShellオブジェクト-
Lesson10 ショートカットの作成
WshShellのオブジェクト1 -WshShortcutオブジェクト・WshUrlShortcutオブジェクト-
Lesson11 環境変数と特殊フォルダ
WshShellのオブジェクト2 -WshEnvironmentオブジェクト・WshSpecialFoldersオブジェクト-
Lesson12 ネットワークとコマンドラインオプション
WScriptのオブジェクト2 -WshNetworkオブジェクト・WshArgumentsオブジェクト-
Lesson13 ファイルシステムにアクセスする
FileSystemObjectのメソッド -FileSystemObjectオブジェクト-
Lesson14 ファイル・フォルダ・ドライブの操作
FileSystemObjectのオブジェクト1 -Folder,File,Driveオブジェクト・Folders,Files,Drivesコレクション-
Lesson15 テキストファイルを読み書きする
FileSystemObjectのオブジェクト2 -TextStreamオブジェクト-
Lesson15
←
▼
▲
WScript.Network オブジェクト
←
▼
▲
WScript.Echo [Arg1] [,Arg2] [,Arg3]
WScript.Sleep( msec )
WScript.Quit( quit_code=0 )
WScript.ScriptFullName
起動した VBScript ファイルのフル・パス。
include された VBScript ファイルでは、include した大元のファイルのパス。
WScript.Echo
WScript.ScriptName
VBS ファイル名+拡張子。 フォルダパスは含まれません。
下記のように、オブジェクト名を記述する必要があります。
グローバル以外のオブジェクトの Class_Terminate は呼ばれません。
vbslib では、Raise を使うことを推奨します。 vbslib を使わないときは、
Err.Raise に指定したエラー番号が、プロセスの返り値(エラーレベル)に
反映されませんが、vbslib を使うと反映されます。(参照:CallFinalizeInModules)
サンプル:
Stop : WScript.Quit 1
Quit する前にデバッガーで止まるようにするとよいでしょう。
実行中のスクリプトの標準入力。 wscript から実行した時は存在しない。
のメソッドが使える。
標準入力に何もないときに、WScript.StdIn.AtEndOfLine を呼び出すと、
標準入力に何か入るまで待ち続けます。
入力があるかどうかを確認する N88BASIC の INKEY に相当することはできません。
←
▼
▲
Dim g_sh : Set g_sh = WScript.CreateObject("WScript.Shell")
オブジェクトの取得
←
▼
▲
Set g_sh = WScript.CreateObject("WScript.Shell")
oldDir = g_sh.CurrentDirectory
g_sh.CurrentDirectory = ".."
:
g_sh.CurrentDirectory = oldDir
カレントディレクトリ・プロパティ
Property Shell::CurrentDirectory as String
サンプル: 一度、親フォルダのフル・パスに設定し、戻す
カレントディレクトリにしようとするフォルダが存在しないときは、
エラー 0x80070002 が返ります。
Set g_sh = WScript.CreateObject("WScript.Shell")
g_sh.CurrentDirectory = g_fs.GetParentFolderName( Wscript.ScriptFullName )
サンプル: 現在の .vbs ファイルが入っているフォルダをカレントにする
プログラムの最初でこれをしないと、プログラム中の相対パスの基準は、コマンド
プロンプトのカレントディレクトリや、スクリプトを起動したプログラムのカレント
ディレクトリになります。
include される .vbs ファイルは、上記のようにしても、カレントディレクトリは
.vbs ファイルが入っているフォルダにはなりません。
include するスクリプトが include する前にカレントディレクトリを設定してください。
←
▼
▲
Function Shell::ExpandEnvironmentStrings( s as string ) as string
環境変数を展開します。
サンプル:
Dim g_sh : Set g_sh = WScript.CreateObject( "WScript.Shell" )
WScript.Echo g_sh.ExpandEnvironmentStrings( "%ProgramFiles%\MyProg" )
C:\Progarm Files\MyProg と出力されます。
指定した環境変数が定義されていないときは、% % で囲んだ部分もそのまま残ります。
エラーにはなりません。
g_sh.ExpandEnvironmentStrings( "%Unknown%\MyProg" ) = "%Unknown%\MyProg"
関連
→ 環境変数を参照する (Excel)
←
▼
▲
Dim g_sh : Set g_sh = WScript.CreateObject( "WScript.Shell" )
Dim envs : Set envs = g_sh.Environment( "Process" )
WScript.Echo "PATH = " + envs.Item( "PATH" )
envs.Item( "TEMP2" ) = "temporary2"
WScript.Echo "TEMP2 = " + envs.Item( "TEMP2" ) '// "TEMP2 = temporary2" と表示
サンプル:
Function Shell::Environment( Place as string ) as WshEnvironment
環境変数のコレクションを返します。 コレクションから環境変数の設定もできます。
【引数】
Place
環境変数の存在場所。 通常 "Process"
返り値
Place 引数
参考
"Process", "System", "User", "Volatile" のいずれか
"Process" を指定すると、現在の WSH プロセスが持っている環境変数になります。
プロセス起動時の値は、 System と User を合わせたものです。
"System", "User" を指定した場合は、PC の設定を変えることになるので、取り扱いに
注意してください。 "User" は、Windows7 でも管理者権限である必要はありません。
環境変数のコレクション
For Each line In g_sh.Environment( "Process" )
WScript.Echo line
Next
サンプル:
←
▼
▲
特殊フォルダのパスを返します
Shell::SpecialFolders( name as string ) as string
name に指定できる値
→ 特殊フォルダ
関連
Set g_sh = WScript.CreateObject( "WScript.Shell" )
MsgBox g_sh.SpecialFolders( "Desktop" )
サンプル:
C:\Documents and Settings\(ユーザ名)\デスクトップ
出力例:
”NetHood”
”SendTo”
”StartMenu”
”Startup”
”Templates”
”Recent”
”Programs”
”PrintHood”
”MyDocuments”
”Fonts”
”Favorites”
”AllUsersStartup”
”AllUsersPrograms”
”AllUsersStartMenu”
←
▼
▲
Dim g_sh : Set g_sh = WScript.CreateObject( "WScript.Shell" )
Dim shcut : Set shcut = g_sh.CreateShortcut( g_sh.SpecialFolders( "SendTo" ) +_
"\file1.lnk" )
shcut.TargetPath = "C:\file1.txt"
shcut.Save
エクスプローラーの右クリック [ 送る ] に file1 を登録します。
file1.lnk
C:\file1.txt
送る、に登録する場合は、パラメーター %1 は不要です。
←
▼
▲
Function Shell::Run( PathAndParam as string,
[ WindowStyle as integer], [ WaitOnReturn as boolean ] ) as integer
PathAndParam に指定したコマンドラインに従って、プロセスを起動します。
【引数】
PathAndParam
起動する実行ファイルのパスと、パラメータ
WindowStyle
ウィンドウスタイル。デフォルト=1、最小化=7
WaitOnReturn
終了するまで待つかどうか。デフォルト=False
返り値
エラーレベル。 待たないときは常に 0
Set g_sh = WScript.CreateObject( "WScript.Shell" )
Set g_fs = WScript.CreateObject( "Scripting.FileSystemObject" )
g_sh.CurrentDirectory = g_fs.GetParentFolderName( WScript.ScriptFullName )
r= g_sh.Run( "cmd.exe /c (dir p)",,True )
If r <> 0 Then Err.Raise 1, "cmd.exe", "error 0x" & Hex(r)
cmd.exe /c (dir p)
cmd.exe
終了まで待ち、エラーレベルをチェックする
WScript.CreateObject("WScript.Shell").Run """sample.xls""",,False
エクセルファイル "sample.xls" を開く
参考
サンプル
サンプル
←
▼
▲
Function Shell::Exec( PathAndParam as string ) as WshScriptExec
コマンドプロンプト・プログラムを起動します。
【引数】
PathAndParam
起動する実行ファイルのパスと、パラメータ
返り値
WshScriptExec オブジェクト
出力は常にリダイレクトされます。
プログラムが終了するまで待ちません。
コマンドプロンプトから標準入力するプログラムを指定すると、停止します。
次のように対応してください。
・
・Exec を呼び出すスクリプトを起動するとき、ファイルから標準入力へリダイレクトする
・起動するプログラムが標準入力をしないようにするオプションを指定する。
vbslib を使ったスクリプトでは、/GUI_input:1 オプションを指定してください。
・返り値の .StdIn へ、WScript.StdIn 以外から送る。
参考
を使う(ただし、新しいウィンドウが開きます)
64bit Windows で、出力が WshScriptExec::StdOut から得られないとき
Exec メソッドを呼び出した cmd.exe や cscript.exe のビット数と、起動した
cmd.exe や cscript.exe のビット数が違うと、WshScriptExec::StdOut から
出力内容を得ることはできません。
Set g_sh = WScript.CreateObject( "WScript.Shell" )
If g_sh.ExpandEnvironmentStrings( "%ProgramFiles(x86)%" ) = "%ProgramFiles(x86)%" Then
If LCase( Right( WScript.FullName, 11 ) ) = "wscript.exe" Then _
g_restart_cmd_exe = "%windir%\system32\cmd" '// For 32bit Windows
Else
If LCase( Right( WScript.FullName, 11 ) ) = "wscript.exe" or _
LCase( Right( WScript.FullName, 20 ) ) = "system32\cscript.exe" Then _
g_restart_cmd_exe = "%windir%\SysWOW64\cmd" '// 32bit cmd.exe for 64bit Windows
End If
If not IsEmpty( g_restart_cmd_exe ) Then
g_sh.Run g_sh.ExpandEnvironmentStrings( g_restart_cmd_exe )+_
" /K cscript.exe //nologo """+ WScript.ScriptFullName +""""
WScript.Quit 0
End If
'// 以上は、コマンドプロンプトのウィンドウを開く処理
'// 以下は、子プロセスの標準出力を取得する処理
If g_sh.ExpandEnvironmentStrings( "%ProgramFiles(x86)%" ) = "%ProgramFiles(x86)%" Then
g_32bit_system_dir = "%windir%\system32" '// For 32bit Windows
Else
g_32bit_system_dir = "%windir%\SysWOW64" '// For 64bit Windows
End If
Set ex = g_sh.Exec( g_sh.ExpandEnvironmentStrings( g_32bit_system_dir )+_
"\cmd /C echo hello" )
Do While ex.Status = 0 : WScript.Sleep 100 : Loop
Do Until ex.StdOut.AtEndOfStream
WScript.Echo ex.StdOut.ReadLine() '// 標準出力を表示する
Loop
対策は、下記のように cmd.exe を経由して、新しいウィンドウを開くことです。
たとえば、64bit Windows で、
C:\Windows\SysWOW64\cmd.exe (32ビット版 cmd.exe)
から cscript を起動すると、PATH 環境変数の設定によって、
C:\Windows\system32\cscript.exe (64ビット版 cscript.exe)
が起動し、WshScriptExec::StdOut から出力内容を得ることはできません。
参考
Exec
←
▼
▲
ウィンドウをアクティブ(手前)にする
←
▼
▲
Function Shell::RegRead( Path as string ) as string
レジストリの値を取得します。
【引数】
Path
レジストリのパス
返り値
値
path に指定したパスが存在しないときは、エラー 0x80070002 になります。
Const E_PathNotFound = &h80070002
Path の末尾が \ のときは、キーの(標準)の値を設定します。
関連
←
▼
▲
Function Shell::RegWrite( Path as string, Value as variant [,Type as string] ) as string
レジストリに値を設定します。
【引数】
path
レジストリのパス
返り値
値
"REG_SZ"
"REG_DWORD"
"REG_BINARY"
"REG_MULTI_SZ"
本メソッドでは使えません
Type 引数の値
"REG_EXPAND_SZ"
環境変数を展開できる文字列
文字列
数値
バイナリ
値を格納するキーが無いときは、そのキーも作成します。
アクセス拒否されると、エラー 0x80070005 になります。
Const E_AccessDenied = &h80070005
Path の末尾が \ のときは、キーの(標準)の値を設定します。
関連