怠日記

写真・金魚・昆虫・プログラミングの趣味を語るサイトです。似たようなことをnoteにも書いたり書いてなかったり。

VBScript - メッセージボックスを一定時間表示したあと自動で閉じる | Shell.Popup メソッド

メッセージボックスを一定時間表示したあと自動で閉じるには、Shell オブジェクトの Popup メソッドを使う。

スクリプトの実行方法(WScript.exe/CScript.exe)に関係なく、メッセージボックスが表示されます。

使い方

ShellObject.Popup (prompt, [ time, ] [ title, ] [ buttons ])

引数

  • prompt
    表示するメッセージ
    メッセージはCR、LF、CR+LFのいずれかを使って改行できる。

  • time
    メッセージボックスを表示する時間(秒)
    ここで指定した時間が経過すると、メッセージボックスは自動で閉じられる。
    指定しなかった場合は、自動で閉じられなくなる。

  • title
    タイトルバーに表示する文字列

  • buttons
    ボタンの種類、アイコンの種類、既定のボタン、メッセージボックスのモダリティの組み合わせを指定する。

▼ボタンの種類

  • vbOKOnly(0): [OK] ボタンのみを表示
  • vbOKCancel(1): [OK]、[キャンセル] ボタンを表示
  • vbAbortRetryIgnore(2): [中止]、[再試行]、[無視] の各ボタンを表示
  • vbYesNoCancel(3): [はい]、[いいえ]、[キャンセル] の各ボタンを表示
  • vbYesNo(4): [はい]、[いいえ] ボタンを表示
  • vbRetryCancel(5): [再試行]、[キャンセル] ボタンを表示

▼アイコンの種類

  • vbCritical(16): [重大なメッセージ] アイコン
  • vbQuestion(32): [警告クエリ] アイコン
  • vbExclamation(48): [警告メッセージ] アイコン
  • vbInformation(64): [情報メッセージ] アイコン

▼既定のボタン

  • vbDefaultButton1(0): 1番目のボタンを既定にする
  • vbDefaultButton2(256): 2番目のボタンを既定にする
  • vbDefaultButton3(512): 3番目のボタンを既定にする
  • vbDefaultButton4(768): 4番目のボタンを既定にする

▼メッセージボックスのモダリティ

  • vbApplicationModal(0): アプリケーションモーダル。現在のアプリケーションでの作業を続行するには、ユーザーはメッセージボックスに応答する必要がある。
  • vbSystemModal(4096): システムモーダル。ユーザーがメッセージボックスに応答するまで、すべてのアプリケーションが中断する。
  • vbMsgBoxHelpButton(16384): メッセージボックスに [ヘルプ] ボタンを追加する。
  • vbMsgBoxSetForeground(65536): [メッセージ ボックス] ウィンドウを前景ウィンドウとして指定する。
    →試してみたところ効かなかった。VBScript では効果がないのかもしれない。
  • vbMsgBoxRight(524288): テキストを右揃えにする。
  • vbMsgBoxRtlReading(1048576): ヘブライ語アラビア語のシステムでテキストが右から左に読む形式で表示されるように指定する。

戻り値

押されたボタンを表す整数が返る。
何のボタンも押されず、メッセージボックスが閉じた場合は -1 が返る。

  • vbOK(1): OK
  • vbCancel(2): Cancel
  • vbAbort(3): 中止
  • vbRetry(4): 再試行
  • vbIgnore(5): 無視
  • vbYes(6): はい
  • vbNo(7): いいえ

5秒経過したら自動で閉じる

Dim shell
Set shell = CreateObject("WScript.Shell")
Dim ret
ret = shell.Popup("処理を続けてよろしいですか?", _
                  5, _
                  "継続確認", _
                  vbYesNo + vbQuestion)
If ret = vbYes Then
    WScript.Echo "はい"
ElseIf ret = vbNo Then
    WScript.Echo "いいえ"
ElseIf ret = -1 Then
    WScript.Echo "未選択"
End If

自動で閉じられないようにする

Popup メソッドの第2引数を空にするだけで OK 。

Dim shell
Set shell = CreateObject("WScript.Shell")
Dim ret
ret = shell.Popup("処理を続けてよろしいですか?", _
                  , _
                  "継続確認", _
                  vbYesNo + vbQuestion)
If ret = vbYes Then
    WScript.Echo "はい"
ElseIf ret = vbNo Then
    WScript.Echo "いいえ"
End If