WshShellオブジェクトについて
Theme
VBScriptの学習続き
参考:
WshShellオブジェクト
WSHの内部オブジェクト
ProgID: "WScript.Shell"
一覧
WshShellオブジェクト
メソッド
- AppActivate
- SendKeys
- ExpandEnvironmentStrings
- LogEvent
- Popup
- RegRead
- RegWrite
- RegDelete
- Run
- Exec ---> WshScriptExecオブジェクト
- CreateShortcut ---> WshShortcut/WshUrlShortcutオブジェクト
プロパティ
- CurrentDirectory
- Environment ---> WshEnvironmentオブジェクト
- SpecialFolders ---> WshSpecialFoldersオブジェクト
WshScriptExecオブジェクト
★WshShell Execメソッドから派生
メソッド
- Terminate
プロパティ
- ExitCode
- ProcessID
- Status
- StdIn
- StdOut
- StdErr
WshShortcutオブジェクト
★WshShell CreateShortcutメソッドから派生
メソッド
- Save
プロパティ
- Arguments
- Description
- FullName
- HotKey
- IconLocation
- RelativePath
- TargetPath
- WindowStyle
- WorkingDirectory
WshUrlShortcutオブジェクト
★WshShell CreateShortcutメソッドから派生
メソッド
- Save
プロパティ
- FullName
- TargetPath
WshEnvironmentオブジェクト
★WshShell Environmentプロパティから派生
メソッド
- Count
- Remove
プロパティ
- Length
- Item("環境変数名")
WshSpecialFoldersオブジェクト
★WshShell SpecialFoldersプロパティから派生
メソッド
- Count
プロパティ
- Length
- Item("特殊フォルダ名")
各メンバ解説
Runメソッド
WSHからアプリケーションを起動できる
実行時にウィンドウスタイル等指定可能
cf) Execメソッド:起動・実行中アプリと通信可能
記法
object.Run ファイルパス(, ウィンドウスタイル)(, 同期処理設定)
Dim objWshShell Set objWshShell = WScript.CreateObject("WScript.Shell") '▼第1引数について▼ '例)メモ帳起動 objWshShell.Run "C:\Windows\System32\notepad.exe" '通常フルパス 'objWshShell.Run "%windir%\System32\notepad.exe" '環境変数使用可能 'objWshShell.Run "notepad.exe" '環境変数PATHに通っているフォルダ内ならファイル名のみでOK 'カレントディレクトリ内でもファイル名のみでOK 'objWshShell.Run """C:\Program Files\Internet Explorer\iexplore.exe""" 'パス内に空白ある場合は3つの「"」で囲む Set objWshShell = Nothing
第2引数(省略可)
数値 | ウィンドウ・スタイル | アクティブウィンドウ |
---|---|---|
0 | 非表示 | そのまま(変化なし) |
1 ★規定値 | 通常サイズ | 起動したアプリ |
2 | 最小化 | 起動したアプリ |
3 | 最大化 | 起動したアプリ |
4 | 通常サイズ | そのまま(変化なし) |
5 | そのまま | 起動したアプリ |
7 | 最小化 | そのまま(変化なし) |
第3引数(省略可)
起動アプリの終了を待つか否かBoolean値で設定
- True:同期処理(待機する)
- False:非同期処理(待機しない)★既定値
★環境変数 確認画面
- [Windows] + [pause] : 設定 - [システム] - [バージョン] 画面起動
- [システムの詳細設定]リンククリック
- [システムのプロパティ]画面開く
- [詳細設定]タブ - [環境変数]ボタン
キオスクモード(全画面表示)
キオスクモードは-k
オプションを最後につける
キオスクモードで開いたウィンドウは[Alt] + [F4]で閉じることができる
AppActivateメソッド
任意のウィンドウをアクティブにできる(アクティブ化の成功をTrue/Falseで返す)
任意のウィンドウ指定方法
ウィンドウタイトルの完全一致/前方一致/後方一致
Execメソッド使用時のProcessID
SendKeysメソッド
アクティブなウィンドウにキーコードを送るメソッド
キーボードにABCと入力する → "ABC"
key | code |
---|---|
プラス記号+ | {+} |
キャレット^ | {^} |
パーセント記号% | {%} |
チルダ~ | {~} |
かっこ() | {(}{)} |
BackSpace | {BACKSPACE}、{BS}、{BKSP} |
Break | {Break} |
CapsLock | {CAPSLOCK} |
Del Delete | {DELETE}、{DEL} |
↓ | {DOWN} |
終了 | {END} |
Enter | {ENTER}、~ |
Esc | {ESC} |
HELP | {HELP} |
ホーム | {HOME} |
Ins、Insert | {INSERT}、{INS} |
← | {LEFT} |
NumsLock | {NUMLOCK} |
PageDown | {PGDN} |
PageUp | {PGUP} |
PrintScreen | {PRTSC} |
→ | {RIGHT} |
ScrollLock | {SCROLLOCK} |
Tab | {TAB} |
↑ | {UP} |
F1 ~ F16 | {F1} ~ {F16} |
Shift | + |
Ctrl | ^ |
Alt | % |
+(EC)
: Shift + E + C^C
: Ctrl + C
{key number}形式で繰り返し
{LEFT 42}
: ←キーを42回{h 10}
: Hキーを10回
注意
AppActivate&SendKeysの誤爆の可能性を念頭において最終手段として使用する
RegRead/RegWrite/RegDeleteメソッド
レジストリの値を読み込む/書き込む/削除するメソッド
注意 レジストリの操作はシステムや設定を破壊してしまう危険があるので実行の際は要注意
# レジストリ構造
ファイルシステムと同様の構造※例外あり
ルート・キー名 | 省略名 | 内容 |
---|---|---|
HKEY_CLASSES_ROOT | HKCR | ファイル・タイプやクラスIDの設定 |
HKEY_CURRENT_USER | HKCU | 現在のユーザーに適用される設定 |
HKEY_LOCAL_MACHINE | HKLM | すべてのユーザーに適用される設定 |
HKEY_USERS | - | HKCUの初期設定とすべてのユーザーの設定(各ユーザーのHKCU) |
HKEY_CURRENT_CONFIG | - | 現在の構成に関する設定 |
エントリの名前、エントリの種類、エントリのデータ
エントリの種類 | 意味 | VBScriptでの型 |
---|---|---|
REG_SZ | 文字列 | String |
REG_DWORD | 数値 | Long |
REG_BINARY | バイナリ値(2進数の値) | Byteの配列 |
REG_EXPAND_SZ | 展開可能な文字列 | String |
REG_MULTI_SZ | 文字列の配列 | Stringの配列 |
ファイルシステムとの相違点
キーに値が存在する
エントリの名前が「(既定)」と表示されているものは、
エントリの名前が(既定)なのではなく、キーの値を示すものである
RegReadメソッド
引数にキー\エントリの名前
既定値を読む際はキー\
例えば、HKEY_CLASSES_ROOT\.<拡張子>
キーには、そのファイルタイプを示す値が格納されている
Point
REG_BINARYはByte型の配列と返されるので各要素を取得するにはForEach~Next文やJoin関数を、Byte型数値を16進数で表示したい場合はHex関数を使用
RegReadメソッドで引数に設定したキーやエントリの存在有無をチェックする方法
'変数strRegEntryにチェックしたいキー・エントリを設定 On Error Resume Next objWshShell.RegRead strRegEntry If Err.Number = -2147024894 Then '//存在しないときにこのエラーが出る Msgbox strRegEntry & "はありません" ElseIf Err.Number = 0 Then Msgbox strRegEntry & "はあります" End If Err.Clear On Error Goto 0
RegWriteメソッド
objWshShell.RegWrite 書き込むエントリ, 書き込むエントリのデータ, 書き込むエントリの種類
※書き込むエントリにキー値(例:"HKEY_CURRENT_USER\Software\WSH Lesson\")を設定するとキーに値を書き込む
RegDeleteメソッド
エントリやキーを引数に指定して削除
キーの中のエントリを削除せずとも、キーを削除することで一括で削除できる
Popupメソッド
intButton = objWshShell.Popup(strText, [nSecondsToWait],[strTitle],[nType])
自動的に閉じた場合、-1を返り値とする
LogEventメソッド
objWshShell.LogEvent intType,strMessage[,strTarget]
intType
は以下の通り
intType | 意味 |
---|---|
0 | SUCCESS(成功) |
1 | ERROR(エラー) |
2 | WARNING(警告) |
4 | INFORMATION(情報) |
8 | AUDIT_SUCCESS(成功の監査) |
16 | AUDIT_FAILURE(失敗の監査) |
strTarget:コンピュータ名を指定
★ローカル・コンピュータ デフォルト値
ExpandEnvironmentStringsメソッド
環境変数を展開するためのメソッド
CurrentDirectoryプロパティ
カレント・ディレクトリを取得または設定するためのプロパティ
Execメソッド
プロセス・IDを取得してアプリケーション・ウィンドウをアクティブ化や操作できる
Terminateメソッドを使用してアプリケーション終了ができる
StdIn,StdOut, StdErrプロパティがが使用できる
RegExpオブジェクト\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
CreateShortcutメソッド/WshShortcutオブジェクト/WshUrlShortcutオブジェクト
- 引数のパスの拡張子次第で作成するオブジェクトが変わる
拡張子
- .lnk => WshShortcutオブジェクト
プロパティ | 意味 |
---|---|
Arguments | ショートカットの引数 |
Description | コメント |
FullName | ショートカット(*.lnk)の絶対パス(読み取り専用) |
HotKey | ショートカット・キー |
IconLocation | アイコン・ファイルのパスとアイコン・インデックス |
RelativePath | ショートカットの相対パス(未実装のため呼び出してもエラーになる) |
TargetPath | ショートカットのリンク先パス |
WindowStyle | 実行時のウィンドウ・スタイル:1=通常、2=最大化、7=最小化 |
WorkingDirectory | 作業フォルダ |
- .url => WshUrlShortcutオブジェクト
プロパティ | 意味 |
---|---|
FullName | ショートカット(*.url)の絶対パス(読み取り専用) |
TargetPath | ショートカットのリンク先パス |
SpecialFoldersプロパティ/WshSpecialFoldersオブジェクト
特殊フォルダ名 | 特殊フォルダの説明 |
---|---|
AllUsersDesktop | すべてのユーザーのデスクトップ |
AllUsersStartMenu | すべてのユーザーのスタート・メニュー |
AllUsersPrograms | すべてのユーザーのスタートメニュー配下のプログラム |
AllUsersStartup | すべてのユーザーのスタートアップ |
Desktop | 現在のユーザーのデスクトップ |
Favorites | 現在のユーザーのお気に入り |
Fonts | フォント |
MyDocuments | 現在のユーザーのマイ・ドキュメント |
NetHood | 現在のユーザーのネットフォルダ |
PrintHood | 現在のユーザーのプリンタ・フォルダ |
Programas | 現在のユーザーのスタートメニュー配下のプログラム |
Recent | 現在のユーザーの最近使ったファイル |
SendTo | 現在のユーザーの送る |
StartMenu | 現在のユーザーのスタート・メニュー |
Startup | 現在のユーザーのスタートアップ |
Templates | 現在のユーザーのテンプレート |
AppData | 現在のユーザーのアプリケーションのデータ |
Environmentプロパティ/WshEnvironmentオブジェクト
引数 | 環境変数名 | 説明 |
---|---|---|
System | システム環境変数 | すべてのユーザーに適用される |
User | ユーザー環境変数 | ユーザーごとに設定可能 |
Volatile | 揮発性環境変数 | ログオフとともにクリアされる |
Process | プロセス環境変数 | 現在読み込まれているすべての環境変数。読み込み専用 |
引数省略時の設定はOSのバージョンで異なる