Gilja's logs of the struggles with programming

シン母駆け出しエンジニアの奮闘記

WshShellオブジェクトについて

Theme

VBScriptの学習続き

参考:

atmarkit.itmedia.co.jp


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

プロパティ

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:非同期処理(待機しない)★既定値

環境変数 確認画面

  1. [Windows] + [pause] : 設定 - [システム] - [バージョン] 画面起動
  2. [システムの詳細設定]リンククリック
  3. [システムのプロパティ]画面開く
  4. [詳細設定]タブ - [環境変数]ボタン

キオスクモード(全画面表示)

キオスクモードは-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プロパティがが使用できる

IPアドレス正規表現

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のバージョンで異なる