WshShellオブジェクト (Wscript.Shell)
[概要]
WSHが提供する、便利な機能を呼び出すためのオブジェクトです。
[機能を提供するファイル]
wshom.ocx
Windows Scripting Host Runtime Library
[呼び出し方]
Set WSHShell=Wscript.CreateObject("Wscript.Shell")
[主なメソッド]
            '「AppTitle」というタイトルを持つウィンドウが表示されるまで待つ。
Dim ret
Set WshShell = WScript.CreateObject("WScript.Shell")
Do While ret=False
	ret=WshShell.AppActivate("AppTitle")
	wscript.sleep 100
Loop
        
        
            Set WSHShell=Wscript.CreateObject("Wscript.Shell")
MsgBox WSHShell.ExpandEnvironmentStrings("%winbootdir%")
'Windowsがインストールされているフォルダを表示。
        
    
            Set WSHShell=Wscript.CreateObject("Wscript.Shell")
intMsg=WSHShell.Popup ("このダイアログは5秒後自動的に閉じます。",5,"Test",vbOKOnly)
If intMsg=-1 Then MsgBox "自動的に閉じました。このダイアログは自動的に閉じません(^^;",vbOKOnly,"Test"
        
    | HKEY_CLASSES_ROOT HKEY_USERS HKEY_CURRENT_CONFIG  | 
                HKCR | 
| HKEY_CURRENT_USER | HKCU | 
| HKEY_LOCAL_MACHINE | HKLM | 
 anyValueには任意の値を指定します。 
         strTypeには、値の種類を指定できます。REG_SZ,
        REG_EXPAND_SZ (どちらも文字列。違い不明)
        REG_DWORD (DWORD値) REG_BINARY (バイナリ)を指定できます。
         省略すると、文字列の値が書き込まれます。
        
         REG_DWORDを指定すると、anyValueの値に文字列型の値を指定しても、自動的に整数値に変換され書き込まれますが、REG_BINARYでは整数値しか指定できません。
        
         バイナリ型のデータで、たとえば値がf5,18,0c,1eなら&H1E0C18F5(もしくは504109301)のように指定します。
         1(=&H01)などの1バイトの値をそのまま書き込もうとすると、01
        00のように2バイトになってしまいます。これを回避するには、CByte(&H01)のように、明示的にバイト型に変換した値を指定します。
         ただし、REG_BINARYはLong型の整数しか指定できないため、書き込める値に限度(すなわち&HFFFFFFFFまで)があります。これを越えるデータを指定したい場合は、.regファイルを自前で用意し、
        WshShell.Run "regedit /s hogehoge.reg"
        のように/sオプションをつけて実行し、レジストリに書き込んでください。(/sオプションをつけると、確認メッセージが出なくなります)
        
         (例) : 
            '登録情報変更スクリプト。これってけっこう便利。
Set WSHShell=Wscript.CreateObject("Wscript.Shell")
Call RegChange ("HKLM\Software\Microsoft\Windows\CurrentVersion\RegisteredOwner","ユーザー名を入力してください")
Call RegChange ("HKLM\Software\Microsoft\Windows\CurrentVersion\RegisteredOrganization","会社名を入力してください")
Sub RegChange(strName,strMsg)
	Dim Value
	Value=InputBox (strMsg,"登録変更",WSHShell.RegRead (strName))
	If Value<>"" Then
		WSHShell.RegWrite strName,Value,"REG_SZ"
	End If
End Sub
        
    
            'ファイル検索の履歴削除
On Error Resume Next
Dim WSHShell
Set WSHShell = WScript.CreateObject("WScript.Shell")
Const Key="HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Doc Find Spec MRU\"
WSHShell.RegDelete Key
        
    
            'REG_BINARYの値を読む例
Set WSHShell=Wscript.CreateObject("Wscript.Shell")
arr=WSHShell.RegRead ("HKLM\Software\Microsoft\Windows\CurrentVersion\DigitalProductId")
a=arr
b=arr
For I = LBound(arr) To UBound(arr)
	a(I) = CInt(arr(I))
	b(I) = Hex (CInt(arr(I)))
Next
msgbox Join(a),,"10進"
msgbox Join(b),,"16進"
        
        
         なお、あるキー以下にどんなサブキーや値があるかを直接確認することはできません。その場合は、WshShell.Run
        "regedit /e C:\Windows\Temp\shellfol.reg
        HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User
        Shell Folders"のようにして、テキストファイル化し、それを読み取ってやるなどの措置が必要になります。
        
        
            Set WSHShell=Wscript.CreateObject("Wscript.Shell")
MsgBox "メモ帳を起動します。"
WSHShell.Run "notepad.exe",1,True
MsgBox "Tips.txtを最大化で表示します。"
WSHShell.Run "tips.txt",3,True
MsgBox "Dirの結果をc:\filelist.txtに出力します。"
WSHShell.Run "command.com /c dir>c:\filelist.txt",0
MsgBox "IEを起動します。"
WSHShell.Run Chr(34) & "C:\Program Files\Internet Explorer\IEXPLORE.EXE" & Chr(34) ,1
        
    
            'このスクリプトは、Outlook Express4を立ち上げ、「すべてダウンロード」を実行するスクリプトです。
'・ウィンドウタイトルに "Express"が含まれていること。また他に該当するウィンドウが表示されていないこと
'・起動時にダイヤルしない設定にしていること
'が条件です。(レジストリの設定を読み込むことでここら辺は調整可能ですが、本筋とはなれるのでここでは省略しました)
'ダウンロード後に切断するかどうかの設定はお好みで。
'キーコードを送るタイミングその他で、うまく動作しない可能性もあります。ご了承ください。
'また、OE5での動作は想定していません。
Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run "C:\Progra~1\Outloo~1\msimn.exe" 'OEを立ち上げる。
WScript.Sleep 5000 '5秒ウェイトを入れ起動を待つ。適宜調整してください。
WSHShell.AppActivate "Express" 'タイトルが"Express"で終わるウィンドウを探し、それを前面に表示させる。
WScript.Sleep 100
WSHShell.SendKeys "^+M" 'Ctrl+Shift+MのキーコードをOutlook Expressのウィンドウに送る。「すべてダウンロード」のショートカットキーです。
WScript.Sleep 100
WSHShell.SendKeys "%Y" 'Alt+Yのキーコードを送る。オンラインに切り替えますか?というダイアログで「はい」を押す操作です。
        
    
            Set X =WScript.CreateObject("nantoka.kantoka") 'オブジェクト作成
X.nantokamethod 'メソッドの実行
WScript.ConnectObject(X,"Event") 'イベントの宣言
Sub Event_nantokaevent(strNantoka) 'イベント
	msgbox strNantoka
End Sub
        
    
            On Error Resume Next
Set WSHShell = WScript.CreateObject("WScript.Shell")
...処理...
If Err.Number<>0 Then
	'エラーが発生した場合は、"Error"タイプを指定し、エラー情報を書き込む。
	WSHShell.LogEvent 1,Err.Source & "/" & Err.Number & "/" & Err.Description
Else
	'エラーが発生しなかった場合は、"Success"タイプを指定し、そのスクリプト名を書き込む。
	WSHShell.LogEvent 0,WScript.ScriptFullName
End If
        
    [主なプロパティ]
[定数]
●WshWindowStyle
| 定数名と値 | 意味 | 
| Const WshHide = 0 | 非表示 | 
| Const WshNormalFocus = 1 | 通常サイズ | 
| Const WshMinimizedFocus = 2 | 最小化 | 
| Const WshMaximizedFocus = 3 | 最大化 | 
| Const WshNormalNoFocus = 4 | 通常サイズかつ非フォーカス | 
| Const WshMinimizedNoFocus = 6 | 最小化かつ非フォーカス | 
[関連オブジェクト]