Тема: VBScript: «незакрываемый» MsgBox на заданное время
Как сообщение типа WScript.Echo "Hello, world!!" сделать чтобы оно не закрывалось или его нельзя было закрыть определенное количество секунд.
Сделать такое напрямую невозможно. Эмуляция подобного поведения может выглядеть наподобие:
Option Explicit
Dim objWshShell
Dim intTime4Show ' Заданное (оно же максимально возможное) время показа сообщения
Dim intMinimumTime ' Минимальное время показа сообщения
Dim intTimeStartShowing ' Время начала показа сообщения
Dim intRetValue ' Возвращаемое значение метода .Popup
Set objWshShell = WScript.CreateObject("WScript.Shell")
intTime4Show = 60 ' Заданное время показа сообщения — 1 минута
intMinimumTime = 10 ' Минимальное время показа сообщения — 10 секунд
intTimeStartShowing = Timer ' Засекаем время
Do
' Выводим сообщение поверх всех окон [&H40000] на оставшееся на текущий момент,
' от заданного, время [intTime4Show - (Timer - intTimeStartShowing)]
intRetValue = objWshShell.Popup( _
"Здесь" & vbCrLf & "некий" & vbCrLf & "текст", _
intTime4Show - (Timer - intTimeStartShowing), _
"Тут заголовок", _
vbOKOnly + vbInformation + &H40000)
' Повторяем вывод сообщения, пока не будет выполнено одно из условий:
' 1. Истечёт отведённое время и сообщение будет закрыто по таймауту [intRetValue = -1]
' 2. Сообщение будет закрыто вручную и с момента первого показа
' сообщения до текущего момента пройдёт не менее минимального [intMinimumTime]
' времени [(Timer - intTimeStartShowing) > intMinimumTime]
Loop Until intRetValue = -1 Or (Timer - intTimeStartShowing) > intMinimumTime
Set objWshShell = Nothing
WScript.Quit 0
Реализация была навеяна обсуждением VBScript: как определить оставшееся время выполнения?.
Дополнение от 01.06.2012: с некоторого времени стиль «WS_EX_TOPMOST» окна MessageBox, устанавливаемый константой «MB_TOPMOST» («&H40000» в скрипте), стал препятствовать закрытию окна MessageBox по таймауту — таймаут просто игнорируется. Если у Вас наблюдается такое поведение, просто уберите «+ &H40000» из вызова метода «.Popup()».
Отдельное спасибо за найденную особенность поведения — -TOXA-.