(for Internet Explorer)
← ▼ ▲
↑
メソッドの一覧を調べる
デバッガで、オブジェクトをウォッチして、[Method] を展開すると、メソッドの一覧が分かります。
← ▼ ▲
Scriptlet.TypeLib
→ タイプライブラリ
関連
TypeLib.Guid as string
→ スクリプトを使用して GUID を作成する (Web)
参考
GUID を生成し、生成した GUID を文字列で返します。
TypeLib::Guid
"{8DECCFAC-499B-4510-B3E1-95C68FA794DE}"+Chr(0)+"-"
取得できる文字列の例：
{ … } を取り出すには次のようにしてください。
Dim TypeLib : Set TypeLib = CreateObject("Scriptlet.TypeLib")
s = Left( TypeLib.Guid, 38 )
+Chr(0)+"-"
{ } の中だけ取り出すには次のようにしてください。
Dim TypeLib : Set TypeLib = CreateObject("Scriptlet.TypeLib")
s = Mid( TypeLib.Guid, 2, 36 )
→ CreateGuid (vbslib)
← ▼ ▲
その他
→ オブジェクトの削除
← ▼ ▲
Shell.Application
Dim sh_ap
Set sh_ap = CreateObject( "Shell.Application" )
Scriptable Shell Objects (Web)
version 5.00
Windows 95 系
version 4.71
Windows 2000 系
.NameSpace
フォルダや特殊フォルダを取得します
→ Shell Objects for Scripting and Microsoft Visual Basic (Web)
関連オブジェクト一覧
メンバ
→ Folder
その他
→ Shell
上記で取得できた sh_ap は、
Shell オブジェクト
と
エクスプローラ（シェル）ができる操作を自動化するための COM オブジェクトです。
WSH は Win2000 から標準搭載
→ Folder::MoveHere
サンプル：
ゴミ箱へ捨てる
ShellDispatch2
の両方の
メンバを持つオブジェクトです
→ IShellDispatch2::ShellExecute
ダブルクリックで開く
← ▼ ▲
Shell オブジェクト (Shell.Application)
[ 親: Shell.Application ]
.NameSpace
フォルダや特殊フォルダのオブジェクトを取得します
.Open
フォルダをエクスプローラで開きます。
( "Shell.Application" ) から取得した
Shell オブジェクトは、
CreateObject
メンバ
オブジェクトから使うことができます。
← ▼ ▲
Shell::NameSpace
Function Shell::NameSpace( name as variant ) as Folder
NameSpace( "::{645FF040-5081-101B-9F08-00AA002F954E}" )
→ 特殊フォルダ
特殊フォルダの GUID を指定
特殊フォルダの番号を指定
NameSpace( 10 ) ' ごみ箱
フォルダや特殊フォルダのオブジェクトを取得します
フォルダのフル・パスを指定
NameSpace( "C:\folder1" )
(Web)
[ 親: Shell.Application.Shell オブジェクト ]
【引数】
name
返り値
パスや特殊フォルダの GUID や番号
→ Shell.Application.Folder オブジェクト
ファイルのパスは指定できません。
または Nothing
関連
→ Shell::SpecialFolders
→ FolderItems::Item
ファイルに相当するオブジェクトの取得
← ▼ ▲
Shell::Open
(Web)
Sub Shell.Open( dir as variant )
フォルダをエクスプローラで開きます。
dir 引数
"C:\folder"
フォルダへのパス
10
→ 特殊フォルダ
特殊フォルダの番号
← ▼ ▲
Folder オブジェクト (Shell.Application)
(Web)
[ 親: Shell.Application ]
.MoveHere
ファイルやフォルダを移動します。
メンバ
Shell::NameSpace
から取得できます。
Folder オブジェクトは、
.Items
フォルダの内容の集合を返します。
← ▼ ▲
Folder::CopyHere
Folder オブジェクトのフォルダに、ファイルやフォルダーをコピーします。
Sub Folder::CopyHere( Item as variant [, Options as integer] )
【引数】
Item
Options
コピー元のファイルやフォルダー、または、そのフル パス
オプション(16=すべて「はい」）
参考
Sub Main( Opt, AppKey )
source_path = "C:\home\mem_cache\MyDoc\src\OSDN\vbslib\*"
destination_path = g_sh.SpecialFolders( "Desktop" ) +"\_back_up"
Const FOF_CREATEPROGRESSDLG = &h00
Const FOF_NOCONFIRMATION = &H10
Set sh_app = CreateObject( "Shell.Application" )
Set w_= AppKey.NewWritable( destination_path ).Enable() '// for mkdir
mkdir destination_path
Set destination_folder = sh_app.NameSpace( destination_path )
destination_folder.CopyHere source_path, FOF_CREATEPROGRESSDLG + FOF_NOCONFIRMATION
WScript.Echo "Done!"
End Sub
Set g_sh = WScript.CreateObject( "WScript.Shell" )
サンプル
[ 親: Shell.Application.Folder オブジェクト ]
ウィンドウてコピーの進捗を表示しながらコピーする
→ CopyHereの挙動 (Web)
→ CopyHere メソッドから Zip ファイルを処理することはできません (Web)
→ Hey, Scripting Guy! コピー中に視覚的なインジケータを表示する (Web)
(Web)
ファイルやフォルダーのコピーが完了するまで戻りません。
中断したかどうかを調べることはできません。 ただし、１つのファイルのコピーなら、ファイルの
サイズをチェックすれば判定できます。
← ▼ ▲
Folder::MoveHere
Folder オブジェクトのフォルダに、ファイルやフォルダーを移動します。
(Web)
Sub Folder::MoveHere( Item as variant [, Options as integer] )
【引数】
Item
Options
移動元のファイルやフォルダー、または、そのパス
オプション(16=すべて「はい」）
[ 親: Shell.Application.Folder オブジェクト ]
実際にファイルなどが移動する前に、このプロシージャから戻ります。
移動が完了する前に、スクリプトのプロセスが終了すると、
移動は行われません。
Sub del_to_trashbox( path )
Dim g_fs, sh_ap, TrashBox, fo, fi, fname
Set sh_ap = CreateObject("Shell.Application")
Set g_fs = CreateObject("Scripting.FileSystemObject")
Const ssfBITBUCKET = 10
fname = g_fs.GetFileName( path )
Set fo = sh_ap.NameSpace( g_fs.GetParentFolderName( path ) )
Set fi = fo.Items.Item( fname )
Set TrashBox = sh_ap.NameSpace( ssfBITBUCKET )
TrashBox.MoveHere fi
Do
WScript.Sleep 300
Set fi = fo.Items.Item( fname )
If fi is Nothing Then Exit Do
fi = Empty
Loop
End Sub
サンプル： ファイルやフォルダーをゴミ箱へ捨てる
← ▼ ▲
Folder::Items
(Web)
フォルダの内容の集合を返します。
Function Folder::Items() as FolderItems
【引数】
返り値
→ Shell.Application.FolderItems オブジェクト
[ 親: Shell.Application.Folder オブジェクト ]
← ▼ ▲
FolderItems オブジェクト (Shell.Application)
FolderItems オブジェクトは、
Folder::Items
から取得できます。
[ 親: Shell.Application ]
フォルダの内容の集合です。
(Web)
メンバ
.Item
フォルダの内容を１つ返します。
← ▼ ▲
FolderItems::Item
[ 親: Shell.Application.FolderItems オブジェクト ]
フォルダの内容を１つ返します。
Function FolderItems::Items( name as variant ) as FolderItem
【引数】
返り値
→ Shell.Application.FolderItem オブジェクト
name
番号、または、ファイル名
Dim sh_ap, folder, file
Set sh_ap = CreateObject( "Shell.Application" )
Set folder = sh_ap.NameSpace( "C:\" )
Set file = fo.Items.Item( "file.txt" )
次のようにして、ファイルに相当する FolderItem を取得できます。
または Nothing
← ▼ ▲
FolderItem オブジェクト (Shell.Application)
[ 親: Shell.Application ]
(Web)
FolderItems::Item
FolderItem オブジェクトは、
から取得できます。
ファイル、フォルダ、ショートカットに相当します。
← ▼ ▲
IShellDispatch2 オブジェクト (Shell.Application)
(Web)
IShellDispatch2 のメソッドは、CreateObject( "Shell.Application" ) から取得した
オブジェクトから使うことができます。
メンバ
.ShellExecute
エクスプローラから選べるプログラムを起動します
Dim sh_ap : Set sh_ap = CreateObject( "Shell.Application" )
sh_ap.ShellExecute "C:\Users\user1\Desktop\a.txt"
サンプル
← ▼ ▲
IShellDispatch2::ShellExecute
(Web)
Sub IShellDispatch2::ShellExecute( Path as string, [ Arguments as string,
WorkingDir as string, Verb as string, Show as integer ] )
エクスプローラから選べるプログラムを起動します
【引数】
Path
Arguments
ファイルやフォルダのパス
プログラムに渡すパラメータ
WorkingDir
カレント・ディレクトリ
Verb
エクスプローラのコマンド名（Verb=動詞）
Show
起動時のウィンドウの状態
Windows Vista では、Verb="runas" にすると、「管理者として実行」になります。
→ 別のユーザとして実行
Dim sh_ap : Set sh_ap = CreateObject( "Shell.Application" )
sh_ap.ShellExecute "C:\Users\user1\Desktop\a.txt"
サンプル: .txt に関連付けられたアプリケーションを開きます。(下記パスはVista用)
Dim sh_ap : Set sh_ap = CreateObject( "Shell.Application" )
sh_ap.ShellExecute "C:\Users\user1\Documents"
サンプル: ドキュメント・フォルダを開きます。(下記パスはVista用)
関連
→ start (vbslib)
→ g_admin (vbslib)
参考
← ▼ ▲
ADODB.Stream
(Web)
Const adReadAll = -1
Dim f : Set f = CreateObject( "ADODB.Stream" )
f.Charset = "UTF-8"
f.Open
f.LoadFromFile "utf8bom.xml"
echo f.ReadText( adReadAll )
f.Close
echo TypeName( f ) '// "Stream"
任意の文字コードのテキストファイル、バイナリ・ファイル、または、データ・ベースにアクセスします。
→ C:\Program Files\Common Files\System\ado フォルダ
DLL
Charset
Open
LoadFromFile
サンプル ： UTF-8 のファイルをリードする
ReadText
Close
Const adReadAll = -1
Const adTypeBinary = 1
Dim bin
Dim f : Set f = CreateObject( "ADODB.Stream" )
f.Type = adTypeBinary
f.Open
f.LoadFromFile "a.bin"
bin = f.Read( adReadAll )
f.Close
サンプル ： バイナリ・ファイルをリードする
Type
Open
Close
LoadFromFile
Read
「ADODB.Stream: オブジェクトまたはプロバイダーは要求された操作を実行できません。」
というエラーになるときは、環境変数の値に問題がある可能性があります。
トラブル・シューティング
関連
→ Byte 配列
← ▼ ▲
テキスト・ファイルの文字コードを変換するサンプル
ConvertTextFile "utf16.xml", "UTF-16", "utf8bom.xml", "UTF-8"
Sub ConvertTextFile( SrcPath, SrcCharCode, DstPath, DstCharCode )
Const adReadAll = -1
Const adSaveCreateNotExist = 1
Const adSaveCreateOverWrite = 2
Dim rf : Set rf = CreateObject( "ADODB.Stream" )
Dim wf : Set wf = CreateObject( "ADODB.Stream" )
rf.Charset = SrcCharCode
wf.Charset = DstCharCode
rf.Open
wf.Open
rf.LoadFromFile SrcPath
wf.WriteText rf.ReadText( adReadAll )
wf.SaveToFile DstPath, adSaveCreateOverWrite
rf.Close
wf.Close
End Sub
１行ずつアクセスするとき
Sub ConvertTextFile( SrcPath, SrcCharCode, DstPath, DstCharCode )
Const adReadLine = -2
Const adWriteLine = 1
Const adSaveCreateOverWrite = 2
Const adCRLF = -1
Const adLF = 10
Dim t
Dim rf : Set rf = CreateObject( "ADODB.Stream" )
Dim wf : Set wf = CreateObject( "ADODB.Stream" )
rf.Charset = SrcCharCode
wf.Charset = DstCharCode
rf.LineSeparator = adLF
wf.LineSeparator = adLF
rf.Open
wf.Open
rf.LoadFromFile SrcPath
Do
t = rf.ReadText( adReadLine )
wf.WriteText t, adWriteLine
If rf.EOS Then Exit Do
Loop
wf.SaveToFile DstPath, adSaveCreateOverWrite
rf.Close
wf.Close
End Sub
→ LineSeparator
参考
CR+LF を出力するときは、wf.WriteText t +vbCR, adWriteLine のように、
vbCR が必要です。
Const adReadLine = -2
Const adWriteChar = 0
Const adWriteLine = 1
Const adCRLF = -1
Const adLF = 10
Const adSaveCreateOverWrite = 2
Sub ConvertTextFile( SrcPath, SrcCharCode, DstPath, DstCharCode )
Dim t
Dim rf : Set rf = CreateObject( "ADODB.Stream" )
Dim wf : Set wf = CreateObject( "ADODB.Stream" )
rf.Charset = SrcCharCode
wf.Charset = DstCharCode
rf.Open
wf.Open
rf.LoadFromFile SrcPath
Do
t = rf.ReadText( adReadLine )
WriteLineTmp wf, t
If rf.EOS Then Exit Do
Loop
'// WriteLineTmp wf, "#あいう" '// CR+LF
'// WriteLineTmp wf, "#えお"+vbLF '// LF
wf.SaveToFile DstPath, adSaveCreateOverWrite
rf.Close
wf.Close
End Sub
Sub WriteLineTmp( f, line )
'// if CRLF + alpha mode
If Right( line, 1 ) = vbLF Then
f.WriteText line, adWriteChar
Else
f.WriteText line, adWriteLine
End If
End Sub
行末に改行文字が無いときに、CR+LF、行末に vbLF があるときに
LF を出力するようにするには、下記のようにします。
関連
→ Text (BinaryArray) (vbslib)
← ▼ ▲
Linux 形式のテキストに出力するサンプル
Const adWriteLine = 1
Const adCRLF = -1
Const adLF = 10
Const adSaveCreateOverWrite = 2
Dim f : Set f = CreateObject( "ADODB.Stream" )
f.Charset = "EUC-JP"
f.LineSeparator = adLF
f.Open
f.WriteText "あいう", adWriteLine
f.SaveToFile "out.txt", adSaveCreateOverWrite
f.Close
← ▼ ▲
Type (ADODB.Stream)
Property Stream::Type as integer
バイナリ・ストリームか、テキスト・ストリームか。
(Web)
adTypeBinary (=1)
adTypeText (=2)
デフォルト
が 0 のときに変更できます。
Position プロパティ
← ▼ ▲
Charset (ADODB.Stream)
(Web)
Property Stream::Charset as string
アクセスするときの文字コード。
指定できる値は、HKEY_CLASSES_ROOT\MIME\Database\Charset のサブキーを参照してください。
値の例：
"ascii", "shift_jis", "euc-jp", "unicode", "utf-8", "iso-8859-1", "_autodetect"
参考
→ 漢字文字コード
大文字小文字は区別しません。
"utf-8" は、BOM が有っても無くてもリードはできます。 ライトすると BOM は付きます。
"_autodetect" は、自動判定します。
→ UTF-8 のファイルをリードする
サンプル
Charset を設定する前に、.Position = 0 かつ .Type = adTypeText にする必要があります。
注意
→ コードページ
← ▼ ▲
LineSeparator (ADODB.Stream)
(Web)
Property Stream::LineSeparator as integer
改行文字コード。
adCR (=13)
adCRLF (=-1)
adLF (=10)
Windows 標準 （デフォルト）
Linux 標準、Mac OS X
リード・ストリームでは、改行文字コードが合っていないと、ADODB.Stream::ReadText
で adReadLine したときに、ファイルに記述されている改行文字が入ります。
ファイル
LineSeparator
ReadText - adReadLine の返り値
CR+LF
LF
行の内容
LF
CR+LF
行の内容
行の内容 （改行文字なし）
CR+LF
CR+LF
LF
LF
行の内容 （改行文字なし）
この関係があるので、リード・ストリームと、ライト・ストリームの両方を LF に設定する
と、改行文字が CR+LF の行と LF の行が混ざっていても、改行文字はリード側から
ライト側へ継承されます。
→ １行ずつアクセスするとき
参考
改行の無い最終行
LF
行の内容 （改行文字なし）
CR+LF
改行の無い最終行
行の内容 （改行文字なし）
＋LF
＋CR
← ▼ ▲
Mode (ADODB.Stream)
(Web)
Property Stream::Mode as integer
改行文字コード。
→ ConnectModeEnum (Web)
adModeRead (=1)
デフォルト
adModeReadWrite (=3)
adModeRecursive (=&h0x400000)
adModeWrite (=2)
リード、または、１バイトずつの追加
adModeShareDenyWrite (=8)
他にもあります。
← ▼ ▲
Open (ADODB.Stream)
(Web)
Sub Stream::Open( [ Source as string, ... ] )
ネットワークのフォルダー、またはローカル・マシンを開きます。
ローカル・マシンの場合、パラメーターは省略します。
f.Open
f.Open "URL=scheme://server/folder"
ネットワークの場合、URL= に続けてください（未確認）
→ Close (ADODB.Stream)
関連
→ UTF-8 のファイルをリードする
サンプル
← ▼ ▲
Close (ADODB.Stream)
Sub Stream::Close()
ネットワークのフォルダー、またはローカル・マシンを閉じます。
(Web)
→ UTF-8 のファイルをリードする
サンプル
←
↓