(for Internet Explorer)
← ▼ ▲
↑
RegDelete (Shell)
Sub Shell::RegDelete( Path as string )
レジストリの値かキーを削除します。
【引数】
path
レジストリのパス
返り値
値
(Web)
→ サンプル
Path の末尾が \ のときは、キーを削除します。
Path の末尾が \ ではないときは、値を削除します。
← ▼ ▲
CreateShortcut (Shell)
Option Explicit
Dim g_sh : Set g_sh = WScript.CreateObject( "WScript.Shell" )
Dim desktop_path : desktop_path = g_sh.SpecialFolders( "Desktop" )
Dim shcut : Set shcut = g_sh.CreateShortcut( desktop_path + "\file1.lnk" )
shcut.TargetPath = desktop_path + "\file1.txt"
shcut.Arguments = "1 2 3"
shcut.WorkingDirectory = desktop_path
shcut.Description = "This is test shortcut"
shcut.IconLocation = "foo.exe,1"
shcut.WindowStyle = 3
shcut.HotKey = "CTRL+ALT+SHIFT+X"
shcut.Save
上記のサンプルより細かい設定を追加したもの。
Function Shell::CreateShortcut( ShortcutPath as string ) as WshShortcut
(Web)
ショートカットを新規に作成するか、既存のショートカットを開きます。
デスクトップに、file1.lnk という名前のショートカットができます。
Option Explicit
Dim g_sh : Set g_sh = WScript.CreateObject( "WScript.Shell" )
Dim desktop_path : desktop_path = g_sh.SpecialFolders( "Desktop" )
Dim shcut : Set shcut = g_sh.CreateShortcut( desktop_path + "\file1.lnk" )
shcut.TargetPath = desktop_path + "\file1.txt"
shcut.Save
desktop_path + "\file1.lnk"
desktop_path + "\file1.txt"
サンプル
サンプル
サンプル
既存のショートカットのリンク先を表示する。
Option Explicit
Dim g_sh : Set g_sh = WScript.CreateObject( "WScript.Shell" )
Dim shortcut :Set shortcut = g_sh.CreateShortcut( "Example.lnk" )
WScript.Echo shortcut.TargetPath
Example.lnk
WshShortcut
関連
→ ReplaceShortcutFilesToFiles (vbslib)
← ▼ ▲
WshShortcut オブジェクト
ショートカット ファイルを操作するオブジェクト。
.Arguments
実行するときの引数
.Description
(Web)
.FullName
.Hotkey
.IconLocation
.TargetPath
.WindowStyle
.WorkingDirectory
リンク先のパス
実行するときのカレント フォルダー
説明文
アイコンのパス
実行するときのウィンドウの表示方法
ホット キー
ショートカット ファイルのパス
← ▼ ▲
Popup (Shell)
(Web)
Function Shell::Popup( Text as string, SecondToWait as integer, Title as string, Type as integer )
as integer
メッセージボックスを表示します。
【引数】
Text
SecondToWait
表示する内容
自動的に閉じるまでの時間（秒）
Title
メッセージボックスのタイトルに表示する内容
押されたボタン、 自動的に閉じたとき = -1
返り値
メッセージボックスの種類
Type
MsgBox
との違いは、自動的に閉じるまでの時間が指定できることです。
カウントダウン表示はしません。
← ▼ ▲
WshScriptExec オブジェクト
(Web)
.Status
.StdIn
.StdOut
.StdErr
0=実行中（WshRunning）、1=終了（WshFinished）
.Terminate
Dim ex
Set ex = g_sh.Exec( "..." )
ex.StdIn.Write "Y"+vbCRLF
.StdIn の例
（下記）
→ Windows管理者のためのWindows Script Host入門：第5回 (3-4) - ＠IT (Web)
参考
.ExitCode
.ProcessID
(Web)
(Web)
← ▼ ▲
Status (WshScriptExec)
で実行したプログラムが実行中かどうか。 0=実行中、1=終了
Dim WshScriptExec::Status as integer
サンプル
Exec (Shell)
text = ""
Do While ex.Status = 0 : WScript.Sleep 100 : text = text + ex.StdOut.ReadAll() : Loop
実行したプログラムの標準出力を取り出さないと、実行したプログラムが止まることがあります。
← ▼ ▲
WshEnvironment オブジェクト
(Web)
→ Environment (Shell)
取得
.Length
.Count
.Item( symbol as string )
(Default Property)
.Remove( symbol as string )
環境変数の設定の一覧。 Array( "VAR1=A", ... )
symbol に指定した環境変数の参照
For Each line In g_sh.Environment
'// line sample is "VAR1=A"
Next
g_sh.Environment(0) は、"=::=::\" です。 無いこともあります。
g_sh.Environment(1) は、"=C:=（カレントディレクトリ）" です。
要素数
要素数
Dictionary 準拠メンバー
その他のメンバー
← ▼ ▲
ユーザーインターフェイス
→ メッセージボックス
→ キーボード・コードを送る
→ 入力ボックス
→ 標準入出力、リダイレクト、エラーレベル
→ WScript::Echo
関連
← ▼ ▲
メッセージボックス
MsgBox "〜しました。"
(p297)
vbOKOnly = 0, vbOKCancel = 1, vbYesNo = 4, vbYesNoCancel = 3
vbCritical = 16, vbQuestion = 32, vbExplamation = 48, vbInformation = 64
ボタンの構成
アイコン
vbDefaultButton1 = 0, vbDefaultButton2=256, vbDefaultButton3=512
デフォルト
vbOK = 1, vbCancel = 2, vbYes = 6, vbNo = 7
押されたボタン
If MsgBox( "〜します", vbOKCancel, "タイトル" ) = vbCancel Then _
WScript.Quit 1
(p264)
MsgBox "1" + Chr(13)+Chr(10) +"2"
複数行
MsgBox "〜しました。", vbOKOnly, "タイトル"
MsgBox は、CScript で実行しても、ウィンドウが表示されます。
WScript.Echo は、WScript ではウィンドウ表示、CScript では標準出力になります。
WScript.Echo "〜しました。"
MsgBox
WScript.Echo
〜しました。
または
→ vbslib - echo
→ WScript::Echo
（プロンプトへ）
(Web)
vbSystemModal=4096
Shell::Popup
wscript.exe のとき
cscript.exe のとき
自動的に閉じるまでの時間を指定できる MsgBox です。
→ Popup (Shell)
← ▼ ▲
入力ボックス、InputBox
(p263)
s = InputBox( "入力してください", "タイトル", "デフォルト" )
キャンセルが押されたら、 s="" になります。
InputBox は、CScript で実行しても、ウィンドウが表示されます。
WScript.StdIn は、WScript ではエラーになります。CScript で実行してください。
Dim name
WScript.StdOut.Write "Enter your name: "
name = WScript.StdIn.ReadLine()
WScript.Echo "Hello, " & name & "!"
Enter your name: bob
Hello, bob , welcome!
InputBox
WScript.StdIn
→ vbslib - input
サンプル （起動時に実行する内容の選択する）
Sub main()
Dim op
If ArgumentExist( "menu1" ) Then
op = 1
ElseIf ArgumentExist( "menu2" ) Then
op = 2
Else
op = InputBox( _
"1. menu1" +vbCRLF+_
"2. menu2",_
WScript.ScriptName )
If op = "" Then WScript.Quit 1
op = CInt( op )
End If
'// common functions
Select Case op
Case 1: '// each functions
Case 2: '// each functions
End Select
End Sub
← ▼ ▲
キーボード・コードを送る
→ ＠IT：4．キー・ストロークの送信とプログラムのアクティベーション (Web)
参考
メモ帳を起動して、文字を入力するスクリプト
Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run "notepad.exe"
WScript.Sleep 500
objShell.SendKeys "hello"
→ キーボード
関連
スクリプトからカレントウィンドウにキーボード入力を送ることができます。
ただし、Sleep を使って、タイミングに気をつける必要があります。
→ WshShell::SendKeys
Set sh = WScript.CreateObject("WScript.Shell")
sh.AppActivate( "net Explorer" ) '(*1)
WScript.Sleep 500
sh.SendKeys "%F"
(*1) タイトル（前方一致または後方一致の部分文字列）
IE をアクティブにして、[ファイル] メニュうーを選択するスクリプト
→ SendInput
← ▼ ▲
WshShell::SendKeys
Sub WshShell::SendKeys( keys as string )
キーボード操作をエミュレーションします。
【引数】
keys
アクティブウィンドウに送信するキーの内容
(Web)
"+(EC)"
シフトキーを押しながら、E、C
"+EC"
シフトキーを押しながら、E、シフトキーを離して、C
"^C"
コントロールキーを押しながら C
"%FS"
Alt キーを押しながら F、離して S
"{ENTER}"
"{ESC}"
"{TAB}"
" " （空白文字）
keys に設定する値の例：
← ▼ ▲
音を鳴らす
Dim g_sh : Set g_sh = WScript.CreateObject( "WScript.Shell" )
Dim player : Set player = CreateObject( "MediaPlayer.MediaPlayer" )
player.FileName = g_sh.ExpandEnvironmentStrings( "%windir%\Media\tada.wav" )
player.Play
While player.PlayState <> 0 : WScript.Sleep 300 : WEnd '// Wait for finish to play
システムの警告音を鳴らす
→ システムの警告音 (SystemSound)
参考
→ 効果音や曲を鳴らす (SoundPlayer)
参考
Dim g_sh : Set g_sh = WScript.CreateObject( "WScript.Shell" )
SystemSound ".Default"
Sub SystemSound( Sound )
Dim player : Set player = CreateObject( "WMPlayer.OCX" )
player.Settings.Volume = 100
player.URL = g_sh.ExpandEnvironmentStrings( g_sh.RegRead( _
"HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default\"+ Sound +"\.Current\" ) )
player.Controls.Play
While player.PlayState <> 1 '// Wait for finish to play
WScript.Sleep 300
If player.PlayState = 10 Then Err.Raise 1,, "This is not sound file."
WEnd
End Sub
(Web)
Dim g_sh : Set g_sh = WScript.CreateObject( "WScript.Shell" )
Dim player : Set player = CreateObject( "WMPlayer.OCX" )
player.Settings.Volume = 100
player.URL = g_sh.ExpandEnvironmentStrings( "%windir%\Media\tada.wav" )
player.Controls.Play
While player.PlayState <> 1 '// Wait for finish to play
WScript.Sleep 300
If player.PlayState = 10 Then Err.Raise 1,, "This is not sound file."
WEnd
（参考） 下記は、Play でエラーになる場合があります。
メディアプレイヤー 7 以降が必要
→ SystemSound (vbslib)
→ Play (vbslib)
メディアプレイヤーの ActiveX を使います。
← ▼ ▲
テスト
If ... Then WScript.Quit 1 ' Error
WScript.Echo "Pass."
→ FCBat （バッチファイルによる標準出力チェック）
単純なテストスクリプトは、次のように記述し、標準出力を比較することで、
テストが正常かどうかを判定します。
関連
→ テスト・プロンプト (Test.vbs) (vbslib)
ただし、テスト項目が多くなってくると大変なので、vbslib にテストを自動化できる
ツールが用意されています。
← ▼ ▲
プログラム起動
→ WSHを起動する
→ メモ帳を起動する（.exe プログラムの起動）
→ 別のスクリプトを呼び出す
→ パラメータ （コマンドライン）
→ 別のスクリプトをインクルードする（WSFファイル）
→ 別のスクリプトをインクルードする（Execute）
→ WScript.Shell::Run
→ WScript.Shell::Exec
→ 常に cscript.exe で実行する （コマンドプロンプトを出す）
→ VBSファイルにドラッグ＆ドロップ
→ 終了、返り値（エラーレベル）を指定する
→ 環境変数を取得する
関連
→ RunProg (vbslib)
→ 別のスクリプトを、オプション付きで起動する
→ vbs ファイルを cscript.exe で起動するようにエクスプローラーを設定する
→ 32ビットWindows と 64ビット Windows の WSH (WOW64)
← ▼ ▲
32ビットWindows と 64ビットWindows の WSH, cscript.exe, wscript.exe
64ビットWindows には、32ビットWSH と 64ビットWSH の２種類が入っています。
64ビットWSH
64ビットWindows
32ビットWindows
32ビットWSH
%windir%\System32\cscript.exe
%windir%\SysWOW64\cscript.exe
%windir%\System32\cscript.exe
-
→ [x64] 64ビットWindows (WOW64)
参考
wscript.exe も同様です。 %windir% は通常 C:\Windows です。
→ g_is64bitWindows (vbslib)
→ g_is64bitWSH (vbslib)
→ cscript 環境変数
← ▼ ▲
VBSファイルにドラッグ＆ドロップ
Dim g_fs : Set g_fs = WScript.CreateObject( "Scripting.FileSystemObject" )
Dim path
If WScript.Arguments.Unnamed.Count <= 0 Then path = "" _
Else path = WScript.Arguments.Unnamed(0)
If path = "" Then WScript.Echo "変換するファイルをドラッグ＆ドロップしてください。":WScript.Quit 1
cd g_fs.GetParentFolderName( WScript.ScriptFullName ) '// change from system32 folder
Dim out_path
out_path = g_fs.GetParentFolderName( path ) +"\"+ g_fs.GetBaseName( path ) +"_replaced.xml"
Dim r : Set r = g_fs.OpenTextFile( path )
Dim w : Set w = g_fs.CreateTextFile( out_path, False, True )
下記のスクリプトで、path にドロップしたファイルのフル・パスが入ります。
ドラッグ＆ドロップすると、カレントフォルダが、C:\Windows\System32 になり危険なので、上記のように
ドロップしたファイルが入っているフォルダを、カレントフォルダにします。
← ▼ ▲
パラメータを取得する
CScript sample.vbs param0 param1 ...
コマンドプロンプトからスクリプトに対してパラメータを渡すことができます。
パラメータ （コマンドライン）, WScript.Arguments, args
スクリプトファイルにドラッグ＆ドロップしたら、ドロップしたファイルパスがパラメータになります。
(Web)
WScript.Arguments.Named.Item("debug")
cscript script.vbs /debug:1
→ ＠IT：Windows TIPS -- Tips：WSHで名前付き引数と名前なし引数を扱う (Web)
名前付き引数の値を参照する
名前付き引数の指定方法
該当する名前の引数がないときは、Empty を返します。
Item は、デフォルト・プロパティなので、省略できます。
パラメータを渡す
名前付き引数（オプション）
名前なし引数（オプション以外）
Set args = WScript.Arguments.Unnamed
If args.Count = 0 Then Err.Raise 1,,"ファイルをドロップしてください"
For i=0 To args.Count - 1
WScript.Echo args(i)
Next
Set args = WScript.Arguments
For i = 0 to args.Count - 1
WScript.Echo args(i)
Next
args( 0 ) が1つ目のパラメータです。
If WScript.Arguments.Count >= 1 Then
s = WScript.Arguments(0)
End If
すべての引数
cscript script.vbs /path:"C:\Folder X\"
"" で囲むと空白を含めることができます
cscript script.vbs /flag
Empty を返します。（/flag が無いときと変わりません）
下記の
For Each key in WScript.Arguments.Named
WScript.Echo "/" + key + ":" + WScript.Arguments.Named.Item(key)
Next
名前付き引数の名前と値を一覧します。
Unnamed( ) の中の数値が、パラメータの数以上のときは、
Err.Number = 9 のエラーになります。
args( 0 ) が1つ目のパラメータです。
Unnamed( ) の中の数値が、パラメータの数以上のときは、
Err.Number = 9 のエラーになります。
If WScript.Arguments.Named.Exists( "Config" ) Then
オプションが指定されたかどうかの判定：
パラメータが /flag:1 でも /flag でも True を返します
ArgumentExist
で判定できます。
vbslib の ArrayClass を用いれば、引数の指定をエミュレーションできます。
→ 名前なし引数（オプション以外）
→ 名前付き引数（オプション）
→ すべての引数
→ GetCmdLine (vbslib)
WScript.Arguments.Unnamed(0)
デフォルト値に対応したオプションの取得：
Dim x
config = "Default"
x = WScript.Arguments.Named( "Config" ) : If not IsEmpty( x ) Then config = x
/ から始まる Linux 形式のパスを、オプションではないパラメーターとするとき
すべての引数
を取得してください。
ユーザーは、/ から始まるオプションを、メイン・パラメータの後に指定してください。
If WScript.Arguments.Unnamed.Count >= 1 Then
input_path = WScript.Arguments.Unnamed(0)
Else
input_path = InputPath( "分割するファイル >", )
End If
引数の区切り、ダブルクォーテーションの指定、/ から始まる名前なし引数
→ 引数の区切り、ダブルクォーテーションの指定、/ から始まる名前なし引数
\" \\\" \\\\\" \\"a > b" \\\\"c d"
\ \\\
\\\\\ \\a
b" \\\\"c
d
コマンドラインやバッチファイルに VBScript の引数を複数指定するときは、空白文字で区切ります。
・" " で囲むと空白文字を要素に含めることができます
・" " で囲んだ隣が空白文字でなければ、要素の続きになります
>
→ コマンドラインの引数とエスケープ (DOS)
→ GetWScriptArgumentsUnnamed (vbslib)
" 文字を、WScript.Argument に渡す
\'/Option\'
"/Option"
…
→ すべての引数
以下は、cmd.exe のコマンドラインと異なる、Shell::Run などに指定するコマンドラインについてです。
・" 文字を、WScript.Argument に渡すことはできません
・vbslib では、\' 文字を指定することで " 文字を渡すことができ、/ から始まる名前なし引数を
渡すことができjます（下記リンク先を参照）
・\, ^, >, < 文字はエスケープ文字や特殊な機能を持つ文字ではありません
参考
WSH では変換されない
vbslib のみ。
ただし、vbslib では、特殊な形式で渡されれば、
GetWScriptArgumentsUnnamed
で取得
できます。
←
↓