怠日記

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

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

メッセージボックスを一定時間表示したあと自動で閉じるには、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