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