(for Internet Explorer)
← ▼ ▲
↑
その他
→ オブジェクトの削除
← ▼ ▲
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::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: オブジェクトまたはプロバイダーは要求された操作を実行できません。」
というエラーになるときは、環境変数の値に問題がある可能性があります。
トラブル・シューティング
← ▼ ▲
テキスト・ファイルの文字コードを変換するサンプル
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 を出力するようにするには、下記のようにします。
← ▼ ▲
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 のサブキーを参照してください。
値の例：
"shift_jis", "euc-jp", "unicode", "utf-8" "iso-8859-1"
参考
→ 漢字文字コード
大文字小文字は区別しません。
"utf-8" は、BOM が有っても無くてもリードはできます。 ライトすると BOM は付きます。
→ UTF-8 のファイルをリードする
サンプル
← ▼ ▲
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 のファイルをリードする
サンプル
← ▼ ▲
LoadFromFile (ADODB.Stream)
Sub Stream::LoadFromFile( Path as string )
(Web)
ファイルの内容をストリームにリードします。
Charset
を設定して
呼び出す前に
Open
を呼び出しておいてください。
→ UTF-8 のファイルをリードする
サンプル
← ▼ ▲
SaveToFile (ADODB.Stream)
Sub Stream::SaveToFile( Path as string [, Options as integer ] )
ストリームの内容をファイルにライトします。
(Web)
adSaveCreateNotExist (=1)
adSaveCreateOverWrite (=2)
上書きできるようにします
← ▼ ▲
Read (ADODB.Stream)
Function Stream::Read( [ SizeOfByte as integer ] ) as array of Byte
バイナリ・ストリームからバイナリ・データをリードします。
adReadAll (=-1)
SizeOfByte 引数
リードするバイト数、または 下記の定数を指定します。
省略時は、adReadAll を指定したときと同じ動きをします。
(Web)
ストリーム全体をリードします。
array of Byte
Read( 1 ) のときは、返り値は配列ではなくなります。
サンプル
→ バイナリ・ファイルをリードする
← ▼ ▲
ReadText (ADODB.Stream)
(Web)
Function Stream::ReadText( LengthOfChar as integer ) as string
テキスト・ストリームからテキストをリードします。
adReadAll (=-1)
LengthOfChar 引数
リードする文字数、または 下記の定数を指定します。
adReadLine (=-2)
ストリーム全体をリードします。
１行だけリードします。
バイナリ・ストリームでは使えません。
LineSeparator
の影響を受けます。
→ UTF-8 のファイルをリードする
サンプル
← ▼ ▲
EOS (ADODB.Stream)
(Web)
Property Get Stream::EOS as boolean
ストリームの末尾かどうか
← ▼ ▲
Write (ADODB.Stream)
(Web)
Sub Stream::Write( Data as array of Byte )
バイナリ・ストリームへバイナリ・データをライトします。
array of Byte
← ▼ ▲
WriteText (ADODB.Stream)
Sub Stream::WriteText( Text as string [, Options as integer ] )
テキスト・ストリームへテキストをライトします。
(Web)
adWriteLine (=1)
Options 引数
最後に改行文字もライトします
普通にライトします
adWriteChar (=0)
省略すると、adWriteChar を指定したときと同じ動きになります。
←
↓