(for Internet Explorer)
その他
Dim  sh_ap
Set  sh_ap = CreateObject( "Shell.Application" )
version 5.00
Windows 95 系
version 4.71
Windows 2000 系
フォルダや特殊フォルダを取得します
関連オブジェクト一覧
メンバ
その他
上記で取得できた sh_ap は、
エクスプローラ(シェル)ができる操作を自動化するための COM オブジェクトです。
WSH は Win2000 から標準搭載
サンプル:
ゴミ箱へ捨てる
の両方の
メンバを持つオブジェクトです
ダブルクリックで開く
フォルダや特殊フォルダのオブジェクトを取得します
フォルダをエクスプローラで開きます。
( "Shell.Application" ) から取得した
Shell オブジェクトは、
メンバ
オブジェクトから使うことができます。
Function  Shell::NameSpace( name as variant ) as Folder
NameSpace( "::{645FF040-5081-101B-9F08-00AA002F954E}" )
→ 特殊フォルダ
特殊フォルダの GUID を指定
特殊フォルダの番号を指定
NameSpace( 10 ) ' ごみ箱
フォルダや特殊フォルダのオブジェクトを取得します
フォルダの絶対パスを指定
NameSpace( "C:\folder1" )
【引数】
name
返り値
パスや特殊フォルダの GUID や番号
ファイルのパスは指定できません。
または Nothing
関連
ファイルに相当するオブジェクトの取得
Sub  Shell.Open( dir as variant )
フォルダをエクスプローラで開きます。
dir 引数
"C:\folder"
フォルダへのパス
10
→ 特殊フォルダ
特殊フォルダの番号
ファイルやフォルダを移動します。
メンバ
から取得できます。
Folder オブジェクトは、
フォルダの内容の集合を返します。
Folder オブジェクトのフォルダに、ファイルやフォルダを移動します。
Sub  Folder::MoveHere( Item as variant [, Options as integer] )
【引数】
Item
Options
移動するファイルやフォルダ
オプション(16=すべて「はい」)
実際にファイルなどが移動する前に、このプロシージャから戻ります。
移動が完了する前に、スクリプトのプロセスが終了すると、
移動は行われません。
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
サンプル: ファイルやフォルダをゴミ箱へ捨てる
フォルダの内容の集合を返します。
Function  Folder::Items() as FolderItems
【引数】
返り値
FolderItems オブジェクトは、
から取得できます。
フォルダの内容の集合です。
メンバ
フォルダの内容を1つ返します。
フォルダの内容を1つ返します。
Function  FolderItems::Items( name as variant ) as 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 オブジェクトは、
から取得できます。
ファイル、フォルダ、ショートカットに相当します。
IShellDispatch2 のメソッドは、CreateObject( "Shell.Application" ) から取得した
オブジェクトから使うことができます。
メンバ
エクスプローラから選べるプログラムを起動します
Dim  sh_ap : Set  sh_ap = CreateObject( "Shell.Application" )
sh_ap.ShellExecute  "C:\Users\user1\Desktop\a.txt"
サンプル
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用)
関連
参考
  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
  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
「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
参考
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 を出力するようにするには、下記のようにします。
  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
Property  Stream::Type as integer
バイナリ・ストリームか、テキスト・ストリームか。
adTypeBinary (=1)
adTypeText (=2)
デフォルト
が 0 のときに変更できます。
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 は付きます。
サンプル
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
Property  Stream::Mode as integer
改行文字コード。
adModeRead (=1)
デフォルト
adModeReadWrite (=3)
adModeRecursive (=&h0x400000)
adModeWrite (=2)
リード、または、1バイトずつの追加
adModeShareDenyWrite (=8)
他にもあります。
Sub  Stream::Open( [ Source as string, ... ] )
ネットワークのフォルダー、またはローカル・マシンを開きます。
ローカル・マシンの場合、パラメーターは省略します。
  f.Open
  f.Open  "URL=scheme://server/folder"
ネットワークの場合、URL= に続けてください(未確認)
関連
サンプル
Sub  Stream::Close()
ネットワークのフォルダー、またはローカル・マシンを閉じます。
サンプル
Sub  Stream::LoadFromFile( Path as string )
ファイルの内容をストリームにリードします。
を設定して
呼び出す前に
を呼び出しておいてください。
サンプル
Sub  Stream::SaveToFile( Path as string [, Options as integer ] )
ストリームの内容をファイルにライトします。
adSaveCreateNotExist (=1)
adSaveCreateOverWrite (=2)
上書きできるようにします
Function  Stream::Read( [ SizeOfByte as integer ] ) as array of Byte
バイナリ・ストリームからバイナリ・データをリードします。
adReadAll (=-1)
SizeOfByte 引数
リードするバイト数、または 下記の定数を指定します。
省略時は、adReadAll を指定したときと同じ動きをします。
ストリーム全体をリードします。
Read( 1 ) のときは、返り値は配列ではなくなります。
サンプル
Function  Stream::ReadText( LengthOfChar as integer ) as string
テキスト・ストリームからテキストをリードします。
LengthOfChar 引数
リードする文字数、または 下記の定数を指定します。
ストリーム全体をリードします。
1行だけリードします。
バイナリ・ストリームでは使えません。
の影響を受けます。
サンプル
Property Get  Stream::EOS as boolean
ストリームの末尾かどうか
Sub  Stream::Write( Data as array of Byte )
バイナリ・ストリームへバイナリ・データをライトします。
Sub  Stream::WriteText( Text as string [, Options as integer ] )
テキスト・ストリームへテキストをライトします。
Options 引数
最後に改行文字もライトします
普通にライトします
adWriteChar (=0)
省略すると、adWriteChar を指定したときと同じ動きになります。