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 | 最小化かつ非フォーカス |
[関連オブジェクト]